用C编写的SDL程序中的段错误

Segmentation Fault in SDL Program Written in C

我正在为 uni 做一个 SDL 项目,并在 windows 上的 visual studio 中制作了一个完整的工作程序,但是当我把程序放在 Linux 上时(演示需要)我得到一个分段错误。我想知道我的 cmakelist 文件是否错误,因为 gdb 输出主要是 sdl 库中的东西,但我真的不确定,因为我是 cmake 的新手。

我尝试使用 gdb 来查找分段错误,但没有多大帮助!我从 windows 版本开始所做的所有更改是我制作了一个 cmakelists.txt 并在 linux.

上更改了我的 SDL 头文件中的包含

GDB 输出:

#0  0x00007fffed4f521e in ?? ()
#1  0x00007ffff4f5bac2 in XCloseIM () from /lib64/libX11.so.6
#2  0x00007ffff7b67c44 in X11_VideoQuit () from /lib64/libSDL2-2.0.so.0
#3  0x00007ffff7b37d4e in SDL_VideoQuit_REAL () from /lib64/libSDL2-2.0.so.0
#4  0x00007ffff7aaffc5 in SDL_QuitSubSystem_REAL () from /lib64/libSDL2-2.0.so.0
#5  0x00007ffff7ab00e8 in SDL_Quit_REAL () from /lib64/libSDL2-2.0.so.0
#6  0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
#7  0x00007fffed144b13 in _dbus_close () from /lib64/libdbus-1.so.3
#8  0x00007fffed13c2c6 in socket_disconnect () from /lib64/libdbus-1.so.3
#9  0x00007fffed13b0fb in _dbus_transport_disconnect.part.5 () from /lib64/libdbus-1.so.3
#10 0x00007fffed125ee2 in _dbus_connection_close_possibly_shared_and_unlock () from /lib64/libdbus-1.so.3
#11 0x00007ffff7b759d6 in SDL_DBus_Quit () from /lib64/libSDL2-2.0.so.0
#12 0x00007ffff7b37d4e in SDL_VideoQuit_REAL () from /lib64/libSDL2-2.0.so.0
#13 0x00007ffff7aaffc5 in SDL_QuitSubSystem_REAL () from /lib64/libSDL2-2.0.so.0
#14 0x00007ffff7ab00e8 in SDL_Quit_REAL () from /lib64/libSDL2-2.0.so.0
#15 0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
#16 0x00007ffff4cefc1b in xcb_disconnect () from /lib64/libxcb.so.1
#17 0x00007fffdcab539d in pa_client_conf_from_x11 () from /usr/lib64/pulseaudio/libpulsecommon-10.0.so
#18 0x00007fffdca76050 in pa_client_conf_load () from /usr/lib64/pulseaudio/libpulsecommon-10.0.so
#19 0x00007fffdccee884 in pa_context_new_with_proplist () from /lib64/libpulse.so.0
#20 0x00007ffff7b5aa2e in ConnectToPulseServer_Internal () from /lib64/libSDL2-2.0.so.0
#21 0x00007ffff7b5b0c9 in PULSEAUDIO_Init () from /lib64/libSDL2-2.0.so.0
#22 0x00007ffff7ab448c in SDL_AudioInit_REAL () from /lib64/libSDL2-2.0.so.0
#23 0x00007ffff7aafcb7 in SDL_InitSubSystem_REAL () from /lib64/libSDL2-2.0.so.0
#24 0x000000000040292f in init () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/init.c:13
#25 0x0000000000402694 in main (argc=1, args=0x7fffffffdbd8) at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:111
(gdb) frame 6
#6  0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
105     SDL_Quit();
(gdb) frame 15
#15 0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
105     SDL_Quit();
(gdb) frame 25
#25 0x0000000000402694 in main (argc=1, args=0x7fffffffdbd8) at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:111
111     if (init()) {
(gdb) frame 24
#24 0x000000000040292f in init () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/init.c:13
13      if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == -1) {

CMakeLists.txt:

project(SDL)

#set( CMAKE_BUILD_TYPE Release)
set( CMAKE_BUILD_TYPE Debug)

cmake_minimum_required(VERSION 2.6)
set (CMAKE_C_FLAGS "-std=c99 -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL_mixer -g")

add_executable(kraken main.c init.c kraken.c worldObject.c menu.c leaderboard.c display.c)

set_property(TARGET kraken PROPERTY C_STANDARD 99)
#14 0x00007ffff7ab00e8 in SDL_Quit_REAL () from /lib64/libSDL2-2.0.so.0
#15 0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
#16 0x00007ffff4cefc1b in xcb_disconnect () from /lib64/libxcb.so.1

xcb_disconnect() 无权调用您的 close() 版本。重命名它,使其不与 POSIX 的 close() 名称冲突或声明它 static.