为什么我的代码出现分段错误?

时间:2019-04-05 17:32:59

标签: c segmentation-fault malloc

当我使用GCC编译我的代码然后运行它时,当我在我的代码中调用函数时,它会打印出:“分段错误(内核已转储)”。

我尝试在Google上搜索解决方案。

这是我当前的代码:

char ** saveLevelPositions() {
  int x, y;
  char ** positions;
  positions = malloc(sizeof(char *) * 25);

  for (y = 0; y < 25; y++) {
    positions[y] = malloc(sizeof(char) * 100);

    for (x = 0; x < 100; x++) {
      positions[x][y] = mvinch(y, x);
    }
  }

  return positions;
}

我希望该功能能够正常运行,并且只会给出细分错误。

编辑:有关上下文,这是GitHub项目的链接:https://github.com/xslendix/rogue

1 个答案:

答案 0 :(得分:5)

正如其他答案和评论所指出的那样,您应该交换对x和y的使用,因此
positions[x][y]应该是positions[y][x]

此外,您没有使用正确的类型来存储mvinch的结果。在curses.h中说:

typedef unsigned long chtype;

所以您应该按以下方式分配内存:

chtype ** positions;
positions = malloc(sizeof(chtype *) * 25);
positions[y] = malloc(sizeof(chtype) * 100);

并打开编译器警告,因为编译器应已标记此错误。