使用以下代码调用 SDL_Quit() 时遇到段错误:
#include <SDL2/SDL.h>
#include <stdio.h>
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int init(){
return SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO);
}
void close(){
SDL_Quit();
return;
}
int main(int argc, char *argv[])
{
if( init() < 0 ){
SDL_Log("Unable to initialize SDL: %s\n", SDL_GetError());
return 1;
}
SDL_Delay(1000);
close();
return 0;
}
这是 gdb 输出:
Breakpoint 1, main (argc=1, argv=0x7fffffffe268) at src/main.c:18
warning: Source file is more recent than executable.
18 if( init() < 0 ){
(gdb) print $eax
$1 = 4196290
(gdb) step
init () at src/main.c:8
8 return SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO);
(gdb) print $eax
$2 = 0
(gdb) step
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb)
但是当我像这样把所有东西都放在 main 中时
int main(int argc, char* argv[])
{
if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0){
SDL_Log("Unable to initialize SDL: %s\n", SDL_GetError());
return 1;
}
SDL_Quit();
return 0;
}
我没有遇到段错误。
你能帮我理解这个问题吗?非常感谢。
最佳答案
好的,我发现了问题所在:我不得不重命名函数 init() 和 close(),因为与已定义的函数存在冲突。
关于c - sdl2 SDL_Quit() 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42485907/