调用 SDL_Quit() 时“停止工作”的基本 SDL2 代码
Posted
技术标签:
【中文标题】调用 SDL_Quit() 时“停止工作”的基本 SDL2 代码【英文标题】:Basic SDL2 Code which "Stop working" when calling SDL_Quit() 【发布时间】:2014-06-04 07:49:12 【问题描述】:所以我最近用 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;
虽然该代码起初执行得很好,但当我按下“Q”键时,窗口关闭,但我得到一个 Windows 错误窗口,提示“我的程序停止工作”。这不是很方便。
使用调试器,我发现在调用 SDL_Quit() 之前一切正常。
有人知道为什么会这样吗? 非常感谢!
【问题讨论】:
【参考方案1】:您没有为您的 SDL_Event 保留内存,并且很可能正在破坏您的堆栈。将其声明为自动并通过地址将其传递给 SDL_PollEvent()。
【讨论】:
【参考方案2】:您正在使用未初始化的指针:
SDL_Event *event;
您需要修复一些错误:
1、如果SDL_CreateWindow()
返回0
,则表示没有窗口,千万不要使用SDL_DestroyWindow()
。
2. 你正在使用事件,所以你应该像这样调用SDL_Init()
:SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS)
。
【讨论】:
以上是关于调用 SDL_Quit() 时“停止工作”的基本 SDL2 代码的主要内容,如果未能解决你的问题,请参考以下文章