如何修复执行错误?

时间:2015-02-09 19:36:13

标签: c++ c sdl sdl-image sdl-mixer

每次编译简单的SDL1.2代码都会成功编译 但是当我尝试通过终端(在Ubuntu中 alt + t )运行它时:

./game
Segmentation fault (core dumped)

我收到此错误。你能帮帮忙吗?这是代码:

#include<SDL/SDL.h>

int main(int argc,char args)    
{
    SDL_Init( SDL_INIT_EVERYTHING);    
    SDL_Surface* screen;        
    screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE);
    SDL_Flip(screen) ![problem running the program][1];
    SDL_Delay(5000);    
    SDL_FreeSurface(screen);    
    SDL_Quit();
}

4 个答案:

答案 0 :(得分:1)

SDL_SetVideoMode会在您未检查的错误时返回NULL

答案 1 :(得分:1)

由于您通过终端运行此操作,我怀疑您可能忘记告诉Xorg允许它从中运行。事实上,如果这确实是问题,它会阻止任何程序在启动时运行。

要解决此问题,请将其输入终端(每个会话只需执行一次):

xhost +

你应该收到一条消息说它成功了。我不记得确切的消息,但它是这样的:

Clients are now allowed to connect from any host.

正在发生的事情(假设我对xhost我是正确的)是SDL_SetVideoMode()调用失败并返回NULL,因为Xorg拒绝了连接。由于您未检查该内容,SDL_Flip()已取消引用NULL指针,因此会出现段错误。


SIDE-NOTE :您的代码中存在错误,但是,您应该调用SDL_FreeSurface(screen);;特定表面是特殊的,并由SDL_Quit();自动释放。来源(参见&#34;返回值&#34;部分):http://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlsetvideomode.html

答案 2 :(得分:0)

在valgrind下运行它。或GDB。或者您选择的其他调试器。

您应该成功为屏幕分配内存。

答案 3 :(得分:0)

检查SDL_SetVideoMode()是否失败!

screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
if (screen == NULL) /* error  */;