c - SDL_CreateRenderer 内的段错误

标签 c ubuntu segmentation-fault sdl sdl-2

我正在尝试在 Xubuntu 14.04 上制作 SDL2 应用程序框架(每个包都是最新的)。

这是我的 init 函数源代码:

int map_x = 50;
int map_y = 20;

//The window we'll be rendering to
SDL_Window *gWindow = NULL;


//The window renderer
SDL_Renderer* gRenderer = NULL;

void
init() {
    if (SDL_Init(SDL_INIT_VIDEO) < 0)
        eprintf("SDL could not initialize: %s\n", SDL_GetError());

    gWindow = SDL_CreateWindow( "SDL Tutorial",\
                                SDL_WINDOWPOS_UNDEFINED,\
                                SDL_WINDOWPOS_UNDEFINED,\
                                map_x, map_y,\
                                SDL_WINDOW_SHOWN);
    if (gWindow == NULL)
        eprintf( "window could not be created: %s\n", SDL_GetError());

    gRenderer = SDL_CreateRenderer( gWindow, -1,\
                                SDL_RENDERER_ACCELERATED);

    if (gRenderer == NULL)
        eprintf("renderer could not be created: %s\n", SDL_GetError());

    //Initialize renderer color
    SDL_SetRenderDrawColor(gRenderer, 0xFF, 0xFF, 0xFF, 0xFF);
}

但它在 SDL_CreateRenderer 函数内部出现了错误。这是 gdb 输出:

(gdb) run
Starting program: /home/ghi/Desktop/tron/client 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x0000000000005885 in ?? ()
(gdb) up
#1  0x00007ffff67dce02 in XCloseIM ()
   from /usr/lib/x86_64-linux-gnu/libX11.so.6
(gdb) 
#2  0x00007ffff7b8d4fb in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#3  0x00007ffff7b81cce in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#4  0x00007ffff7aed785 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#5  0x00007ffff7aed8c8 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#6  0x0000000000400cc5 in close () at client.c:56
56      SDL_Quit();
(gdb) 
#7  0x00007ffff464d723 in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
(gdb) 
#8  0x00007ffff4645a46 in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
(gdb) 
#9  0x00007ffff4644ea7 in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
(gdb) 
#10 0x00007ffff4630e72 in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
(gdb) 
#11 0x00007ffff7b8d534 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#12 0x00007ffff7b81cce in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#13 0x00007ffff7aed785 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#14 0x00007ffff7aed8c8 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#15 0x0000000000400cc5 in close () at client.c:56
56      SDL_Quit();
(gdb) 
#16 0x00007ffff217ab35 in ?? () from /usr/lib/nvidia-331/libGL.so.1
(gdb) 
#17 0x00007ffff0bbda41 in ?? ()
   from /usr/lib/nvidia-331/libnvidia-glcore.so.331.113
(gdb) 
#18 0x00007ffff0ef1814 in ?? ()
   from /usr/lib/nvidia-331/libnvidia-glcore.so.331.113
(gdb) 
#19 0x00007ffff0efd869 in ?? ()
   from /usr/lib/nvidia-331/libnvidia-glcore.so.331.113
(gdb) 
#20 0x00007ffff0db2238 in ?? ()
   from /usr/lib/nvidia-331/libnvidia-glcore.so.331.113
(gdb) 
#21 0x00007ffff0dbd8a7 in ?? ()
   from /usr/lib/nvidia-331/libnvidia-glcore.so.331.113
(gdb) 
#22 0x00007ffff0ba34b3 in ?? ()
   from /usr/lib/nvidia-331/libnvidia-glcore.so.331.113
(gdb) 
#23 0x00007ffff0b8665c in ?? ()
   from /usr/lib/nvidia-331/libnvidia-glcore.so.331.113
(gdb) 
#24 0x00007ffff2122b30 in ?? () from /usr/lib/nvidia-331/libGL.so.1
(gdb) 
#25 0x00007ffff2122cdc in ?? () from /usr/lib/nvidia-331/libGL.so.1
(gdb) 
#26 0x00007ffff2153f59 in ?? () from /usr/lib/nvidia-331/libGL.so.1
(gdb) 
#27 0x00007ffff7b8c0ad in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#28 0x00007ffff7b80be6 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#29 0x00007ffff7b80e95 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#30 0x00007ffff7b2ea44 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#31 0x00007ffff7b284c0 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
(gdb) 
#32 0x0000000000400c38 in init () at client.c:38
38      gRenderer = SDL_CreateRenderer( gWindow, -1,\
(gdb) 
#33 0x0000000000400cef in main (argc=1, argv=0x7fffffffdf48) at client.c:61
61      init();

和 Makefile:

client : client.o
    gcc client.o -Wall -lm -o client `sdl2-config --cflags --libs`

client.o : client.c
    gcc -ggdb3 -lm -Wall -c client.c `sdl2-config --cflags --libs`

我正在使用官方存储库中的 libsdl2-dev。有谁知道这里出了什么问题吗?

完整来源可以在这里找到:https://github.com/hafron/tron/blob/master/client.c

最佳答案

(之前作为评论发布,结果是一个答案;修复了一些拼写错误)

我对 SDL 的使用一无所知,但堆栈转储显示您的 close() 函数是从 nvidia 库内部调用的。我怀疑您用您的函数取代了其他一些 close 标识符。尝试通过在声明前添加 static 关键字来使您的 close 严格本地化:static void close() {...} 或重命名该函数到一些 my_close() 或其他...

关于c - SDL_CreateRenderer 内的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29555759/

相关文章:

c - 打印内存位置时 Printf 产生警告但仍在 xcode 中编译和运行

c - 错误 : cannot convert 'double*' to 'char*' for argument '1' to 'void swap(char*, char*, unsigned int)'

c - 访问 View 中的 DataContext 属性

apache - 使用 app/webroot 在 CakePHP 中将非 www 重定向到 www

python - 如何使用 pyautogui 使用 ubuntu 的 'Windows' 或 'Super' 键?

C Matrix redimensioning导致段错误

c - 为什么 fopen 不打开现有文件? (返回 NULL,错误号 ENOENT)

c - GDB:查找存储函数返回地址的堆栈内存地址?

unix - 如何设置RabbitMQ目录创建新文件的权限?

c - Linux 上线程 C 程序中的段错误