2017-02-27 60 views
0

我用下面的代码调用SDL_QUIT()时遇到分段错误:SDL2 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) 

然而,当我把一切都放在主像这样

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; 
} 

我没有得到分段错误。

你能帮我理解这个问题吗?非常感谢。

+0

在第一个示例中,您只是初始化视频。 – aggsol

+0

@aggsol谢谢您的回答;我做了改变,但没有帮助。 – Itsbananas

+0

段错在哪里?调试器说什么? – Olaf

回答

0

好吧,我发现问题:我不得不重命名函数init()和clsoe(),因为与已经定义的函数有冲突。