c - sdl2 SDL_Quit() 段错误

标签 c segmentation-fault sdl

使用以下代码调用 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/

相关文章:

c - 这个速度有多危险 `strlen` ?

c - struct 中 char* 上的 malloc 的段错误

c++ - 如何在 SDL 2 中获取并保存 BMP 屏幕截图?

c - 无法理解将 SDL_Surface 结构的像素成员转换为 (Uint32*) 的 C 风格

android - 如何将 Android 中的 byte[] 转换为 C 中的 uint8_T 数组?

c - 使用 Visual Studio 2010 在 C 中返回失败类型

c - 如何让 backtrace()/backtrace_symbols() 打印函数名?

c - 分段故障

c - 使用递归的成对差异

c++ - 链接器错误(SDL、OpenGL)