我在SDL2中处理事件时遇到了程序崩溃的问题。
我处理这样的事件:
const Uint8 *key_buttons;
SDL_Event e;
while (SDL_PollEvent(&e))
{
switch(e.type)
{
case SDL_QUIT:
running = false;
break;
case SDL_KEYDOWN:
key_buttons = SDL_GetKeyboardState(0);
break;
case SDL_KEYUP:
key_buttons = SDL_GetKeyboardState(0);
break;
}
}
然后,当我调用这个函数时:
bool Get_KeyButtonState(SDL_Scancode key)
{
if (!key_buttons)
return false;
if (key_buttons[key])
return true;
else
return false;
}
我的程序崩溃了。
如果我在while循环开始时调用SDL_GetKeyboardState()
并停止使用SDL_KEYDOWN
和SDL_KEYUP
,那么我的程序就可以工作了。
所以,我的问题是:为什么会发生这种情况,正确的解决方案是什么还有,有没有一种方法可以在不需要保存所有按钮之前的状态的情况下处理状态的更改(因为我找不到任何功能)?
解决方案只是给出一个初始NULL:
const Uint8 *key_buttons = NULL; // or 0
这样可以确保您的if (!key_buttons) return false;
在任何情况下都能工作。
顺便说一句,const
令人困惑。在这种情况下;指针指向的值"0";是不可变的,但是";指针本身";是可变的。
- 如果您对";const";,请阅读const int*、const int*const和int const*之间的区别是什么