Базовый код SDL2, который «перестает работать» при вызове SDL_Quit ()

0

Поэтому я недавно попал в SDL2 с C++, и я сделал этот очень простой код:

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().

Кто-нибудь знает, почему это происходит? Большое спасибо !

Теги:
error-handling

2 ответа

0

Вы используете неинициализированный указатель:

SDL_Event *event;

И вам нужно исправить некоторые ошибки:
1. Если SDL_CreateWindow() возвращает 0, это означает, что нет окна, и вы не должны использовать SDL_DestroyWindow().
2. Вы используете события, поэтому вы должны вызвать SDL_Init() следующим образом: SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS).

0

Вы не резервируете память для своего SDL_Event и, скорее всего, повредите свой стек. Объявите его как автоматическое и передайте его по адресу SDL_PollEvent().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню