每次编译简单的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();
}
答案 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 */;