我已经阅读了很多(很多!)EXC_BAD_ACCESS
个例子,但是没有提供的解决方案似乎正在解决我遇到的问题。基本上,我有一个看起来像这样的游戏循环:
int GameEngine::Run()
{
if( this->OnInit() == false )
return -1;
SDL_Event Event;
while( this->IsRunning )
{
while( SDL_PollEvent( &Event ) )
{
INPUT->Event( &Event );
for( int i = 0; i < this->objects.size(); i++ )
{
this->objects[i]->OnEvent();
}
if( INPUT->Type( SDL_QUIT ) )
this->Stop();
}
this->OnLoop();
this->OnRender();
}
this->OnCleanUp();
this->PrintObjects();
return 0;
}
很可能是
INPUT->Event( &Event );
那是造成麻烦的原因。此函数在Input
类中如下所示:
void Input::Event( SDL_Event* CurrEvent ) { this->Current_Event = CurrEvent; }
(这也是给我EXC_BAD_ACCESS
的行
因此,输入类中的this->Current_Event
将始终包含当前事件,因为它将从游戏循环中使用最新要轮询的事件进行更新。
目前我不知道如何在Xcode中获取堆栈跟踪,但如果我进行一些手动跟踪,则如下所示:
Input::Event()
GameEngine::Run()
main()
然后它进入SDL代码。
有谁知道这里可能出现什么问题?告诉我你是否需要知道其他任何事情!
答案 0 :(得分:0)
EXC_BAD_ACCESS
说的是你做了一些导致指针(你的,你的设备内部或分配器正在使用的指针)被取消引用并且内存位置不在其中一个内的东西分配给您的程序的块。
在SDL_Event*
处,因为INPUT
未初始化而被引发。