这只是假设显示一个bmp图像到SDL窗口的正面缓冲区。我在玩密码。我认为我的init()函数有问题。我对SDL很陌生。但是,我的指针或SDL功能编辑可能有问题:我使用了GDB,结果发现我的close()函数就是问题所在。我相信是因为我在释放被设置为空的内存?我摆脱了封闭的功能,在我的延迟函数之后释放了我。
#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;
}发布于 2017-01-30 22:24:05
您应该找到一个合理的调试器和其他工具,以确定哪一行是导致错误的原因。基本上,这可以归结为使用一个调试器,如果您使用IDE,或者使用非常好的代码分析工具Val差伦,它通常会随IDE一起使用。
如果您使用gcc,您很可能可以使用gdb来轻松地调试您的程序。以下是关于如何帮助您诊断分段故障的一些资源:
熟悉这些工具,因为当你面对新的问题时,它们将为你节省无数的时间。
https://stackoverflow.com/questions/41946389
复制相似问题