处理结束,退出代码-1073740940(0xC0000374)[CLion + SDL2]

问题描述 投票:0回答:1

虽然我试图关闭程序,但我想像往常一样通过for循环删除动态SDL_surface数组,但是程序以退出代码-1073740940结尾。当我注释此循环时,程序以0退出代码关闭。所以有什么问题?这是代码:

void close(SDL_Window* window, SDL_Surface* surface, SDL_Surface* keys[]) {
//free memory
for( int i = 0; i < KEY_PRESS_SURFACE_TOTAL; ++i )
{
    //KEY_PRESS_SURFACE_TOTAL is defined in enum
    SDL_FreeSurface(keys[i]);
    keys[i] = nullptr;
}

SDL_FreeSurface(surface);
surface = nullptr;

SDL_DestroyWindow(window);
window = nullptr;

SDL_Quit();

我是一个初学者,所以我只是想学习SDL2基础。

更新:这是枚举段代码:

enum KeyPressSurfaces {
KEY_PRESS_SURFACE_DEFAULT,
KEY_PRESS_SURFACE_UP,
KEY_PRESS_SURFACE_DOWN,
KEY_PRESS_SURFACE_LEFT,
KEY_PRESS_SURFACE_RIGHT,
KEY_PRESS_SURFACE_TOTAL };

也是这里在代码中使用这个数组:

bool loadMedia(SDL_Surface* keys[]) {
bool success = true;

keys[KEY_PRESS_SURFACE_DEFAULT] = loadSurface("images/press.bmp");
if( keys[KEY_PRESS_SURFACE_DEFAULT] == NULL ) {
    std::cout << "Failed to load default image!\n";
    success = false;
} //and so on...
return success; }

在主要部分...

SDL_Surface* gKeyPressSurfaces[KEY_PRESS_SURFACE_TOTAL] = { };
//creating window, surface etc.

if ( !loadMedia(gKeyPressSurfaces) )
        std::cout << "Failed to load media!\n";
    else {
        bool quit = false;
        SDL_Event event;
        gCurrentSurface = gKeyPressSurfaces[KEY_PRESS_SURFACE_DEFAULT];

        while ( !quit )
        {
            while (SDL_PollEvent(&event) != 0)
            {
                if ( event.type == SDL_KEYDOWN ) {
                    switch (event.key.keysym.sym) {
                            case SDLK_UP:
                                gCurrentSurface = gKeyPressSurfaces[KEY_PRESS_SURFACE_UP];
                                break; // and so on...

我是按照LazyFoo的SDL2教程完成的,所以我不明白为什么这不起作用。

c++ mingw clion
1个回答
0
投票

SDL_FreeSurface(keys [i]); //此行将keys [i]设置为nullptrkeys [i] = nullptr; //您已经在此行中访问了nullptr

注释键[i] = nullptr;行,那么您的代码将起作用。

© www.soinside.com 2019 - 2024. All rights reserved.