在循环中使用SDL_BlitSurface()进行Segfault

时间:2015-07-21 08:43:19

标签: c segmentation-fault sdl

我获得了char *map,其中包含您可以在屏幕上找到的不同元素。这些元素为e,用于电力,c用于投币,_用于空格。

我已经完成了一个遍历数组的循环,并且只要我有一个这样的字符就会检测到。这是问题所在,当我看到blit为每个字母blit相应的sprite我的程序段错误。

当我拿出SDL_BlitSurface()程序正常工作时,需要进行大量的循环。

我觉得我在SDL_BlitSurface()

之前遗漏了一些东西

这是一切出错的功能:

void            print_map()
{
  int           i;
  SDL_Rect      pos;
  int           x;
  int           y;


  if ((th_client[1].coin = IMG_Load("./images/coin.png")) == NULL)
    printf("Erreur\n");  
  y = 0;
  i = 0;
  while (y != 10)
    {
      pos.y = (y * 10) + 5;
      x = 0;
      while (x != 95)
        {
          pos.x = (x * 10) + 5;
          printf("pos x: %d\n", pos.x);
          if (th_client[1].map[i] == 'c')
            {
              printf("char : %c\n", th_client[1].map[i]);
              if ((SDL_BlitSurface(th_client[i].screen, NULL,th_client[i].coin, &pos)) == -1) // <- it blows up right here
                printf("Erreur\n");
            } 
          x++;
          i++;
        }
      y++;
      printf("y : %d\n", y);
    }
  SDL_FreeSurface(th_client[1].coin);
}

th_client [1]对应于图形线程,里面有我的结构,其中包含初始化SDL所需的一切。

输出:

pos x: 5
...
pos x: 945
y : 1 // <- jumps into the next line
pos x: 5
...
pos x: 355
char : c // <- Coin found
Segmentation fault

0 个答案:

没有答案