sdl - c 分段故障初始化 SDL2. 我的记忆怎么了?

  显示原文与译文双语对照的内容

这只是假设在SDL窗口前端缓冲区中显示一个bmp图像。 我在代码中扮演了。 我想我的init() 函数有问题。 我对SDL是新的,但我的指针必须有问题,或者我的fucntions编辑的缺少一些问题: 我使用了 GDB,结果我的close() 函数是问题。 我相信是因为我释放了设置为空的内存? 我去掉了关闭 fucntion,在我的延迟函数之后释放了 mem 。


#include <SDL2/SDL.h>


#include <stdio.h>


#include <stdbool.h>


#define SCREENWIDTH 640


#define SCREENHEIGHT 480


SDL_Window *win = NULL;


SDL_Surface *scrn = NULL;


SDL_Surface *mscrn = NULL;


bool init()


{


 bool suc = true;


 char name[11] ="Hello SDL";


 if (SDL_Init(SDL_INIT_VIDEO)!= 0) {


 printf("%s", SDL_GetError());


 suc = false;


 } 


 win = SDL_CreateWindow(name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREENWIDTH, SCREENHEIGHT, SDL_WINDOW_SHOWN);


 if (win == NULL) {


 printf("%s", SDL_GetError());


 suc = false;


 }


scrn = SDL_GetWindowSurface(win);



return suc;


} 


bool loadmedia()


 {


 bool suc = true;


 mscrn = SDL_LoadBMP("hello_world.bmp");


 if (mscrn == NULL) {


 printf("%s", SDL_GetError());


 suc = false;


 }


 return suc;


} 


void close()


{


 SDL_FreeSurface(mscrn);


 SDL_DestroyWindow(win);


 SDL_Quit();


}


int main(int argc, char* args[])


{


 if (!init()) {


 close();


 return 1;


 } 


 if (!loadmedia()) {


 close();


 return 1;


 } 


 SDL_BlitSurface(mscrn, NULL, scrn, NULL);


 SDL_UpdateWindowSurface(win);


 SDL_Delay(3000);



 close();


 return 0;


}



时间: 原作者:

要找出导致错误的行和原因,你应该找到一个合理的调试器和其他工具。 基本上它归结于使用IDE的调试器,如果你使用的是,或者使用非常好的代码分析工具。

如果你使用 gcc,很可能使用gdb来调试你的程序。 以下是有关如何帮助你诊断分段故障的一些资源:

熟悉这些工具,因为当你面对新问题时,这些工具将在未来为你节省无数。

...