首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分割故障初始化SDL2。我的记忆有什么问题?

分割故障初始化SDL2。我的记忆有什么问题?
EN

Stack Overflow用户
提问于 2017-01-30 22:17:41
回答 1查看 1.2K关注 0票数 1

这只是假设显示一个bmp图像到SDL窗口的正面缓冲区。我在玩密码。我认为我的init()函数有问题。我对SDL很陌生。但是,我的指针或SDL功能编辑可能有问题:我使用了GDB,结果发现我的close()函数就是问题所在。我相信是因为我在释放被设置为空的内存?我摆脱了封闭的功能,在我的延迟函数之后释放了我。

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2017-01-30 22:24:05

您应该找到一个合理的调试器和其他工具,以确定哪一行是导致错误的原因。基本上,这可以归结为使用一个调试器,如果您使用IDE,或者使用非常好的代码分析工具Val差伦,它通常会随IDE一起使用。

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

熟悉这些工具,因为当你面对新的问题时,它们将为你节省无数的时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41946389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档