基本SDL2代码"停止工作"调用SDL_Quit时()

时间:2014-06-04 07:49:13

标签: c++ error-handling

所以我最近使用C ++进入了SDL2,我做了这个非常简单的代码:

int main(int argc, char** argv)
{

SDL_Event *event;
bool done = false;

if(SDL_Init(SDL_INIT_VIDEO) != 0)
{
    std::cerr << "Problèmes pour initialiser la SDL : " << SDL_GetError() << std::endl;
    return 1;
}
SDL_Window *window = 0;
window = SDL_CreateWindow("Mopion", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_SHOWN);

if(window == 0)
{
    done = true;
}

while(!done)
{
    while(SDL_PollEvent(event))
    {
        switch(event->type)
        {
        case SDL_QUIT:
            done = true;
            break;
        case SDL_KEYUP:
            if(event->key.keysym.sym == SDLK_q)
            {
                done = true;
            }
            break;
        default:
            break;
        }
    }
}
SDL_DestroyWindow(window);
SDL_Quit();

return 0;
}

虽然该代码最初执行得非常好,但当我点击&#34; Q&#34;键,窗口关闭,但我有一个Windows错误窗口说&#34;我的程序停止工作。&#34;这不太方便。

使用调试器,我发现在调用SDL_Quit()之前一切正常。

任何人都知道为什么会这样吗? 非常感谢!

2 个答案:

答案 0 :(得分:0)

您没有为SDL_Event保留内存,并且最有可能破坏您的堆栈。将其声明为自动并将其通过地址传递给SDL_PollEvent()。

答案 1 :(得分:0)

你正在使用未初始化的指针:

SDL_Event *event;

你需要修正一些错误:
1.如果SDL_CreateWindow()返回0,则表示没有窗口,您不能使用SDL_DestroyWindow()
2.您正在使用活动,因此您应该像这样致电SDL_Init()SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS)