SDL_Quit()导致SIGBUS错误

时间:2015-10-06 17:45:07

标签: c sdl

以下从教程网站获取的基本SDL2代码导致了一些奇怪的问题:

49      SDL_Quit();
(gdb) n

Program received signal SIGBUS, Bus error.
0x00007ffff68a5895 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
(gdb) 

一旦调用了置于close()的SDL_Quit(),我就会收到内存访问错误。使用GDB,揭示了以下内容:

void close() {
    SDL_FreeSurface(windowSurface);
    windowSurface = NULL;
    SDL_DestroyWindow(window);
    window = NULL;
}

int main(int argc,char *argv[]) {
    assert(init_SDL() == 0);
    assert(loadMedia() == 0);
    SDL_BlitSurface(windowSurface,NULL,screenSurface,NULL);
    SDL_UpdateWindowSurface(window);
    SDL_Delay(3000);
    close();
    SDL_Quit();
    exit(EXIT_SUCCESS);
}

奇怪的是,我将SDL_Quit()置于close()之外,如下所示:

gcc -g3 -o tutorial tutorial.c `sdl2-config --cflags --libs` 
一切都很好。 SDL_Quit()可以正常工作。当我在另一个函数中调用SDL_Quit()时,为什么会导致SIGBUS错误?

编辑:此代码是使用gcc和以下编译命令在ubuntu 14.04上编译的

@media screen and (max-width: 700px) {

   .menu_element1 {
     display: none;
   }

}

1 个答案:

答案 0 :(得分:4)

您的函数close()与具有相同名称的内部SDL函数冲突,导致奇怪的行为(实际上,它是由SDL调用的libc标准close()系统调用)。

重命名你的功能,应该没问题。