【问题标题】:Why am I getting a segmentation fault in my code?为什么我的代码中出现分段错误?
【发布时间】:2019-04-05 17:32:59
【问题描述】:

当我使用 GCC 编译我的代码然后运行它时,当我将我的函数调用到我的代码中时,它会打印出:“Segmentation fault (core dumped)”。

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

这是我当前的代码:

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

【问题讨论】:

  • positions[x][y] -> positions[y][x]
  • 很遗憾,这不是一个有效的解决方案,我试过了,但遇到了同样的问题。
  • 这绝对是解决方案的有效部分。如果还是有问题,那是不是贴出来的代码(mvinch)?。
  • 还是同样的问题...
  • How to create a Minimal, Complete, and Verifiable example。调试器也可能会有所帮助。

标签: c segmentation-fault malloc


【解决方案1】:

正如其他答案和 cmets 所指出的,您应该交换使用 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);

并打开编译器的警告,因为编译器应该已经标记了这个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多