【问题标题】:Segmentation fault with matrix in CC中矩阵的分段错误
【发布时间】:2014-06-29 19:28:22
【问题描述】:

我对 C 语言有点生疏,我正在尝试初始化一个矩阵,但我遇到了一些问题。做了一些研究,但我找不到任何东西。

我在以下位置遇到分段错误:

char **board;
board = (char **)malloc(N*N*sizeof(char));
board[0][0] = '.'; // segmentation fault here

我可以这样做:

char board[N][N] = '.';

但我需要通过引用将矩阵传递给函数,但我也遇到了错误,所以我尝试从一开始就使用双指针。

谢谢。

【问题讨论】:

  • 显示期望获取矩阵的函数的声明
  • 搜索:如何分配二维数组。
  • @this 很难找到一个有很好答案的线程。 This answer 是我能找到的最好的。
  • 使用 C,在处理二维数组时,您需要决定是否需要一个指针数组,每个指针指向一个单独的 char 数组(或任何数据类型),或者如果您想要一个char 的二维数组作为一个内存块。这些是完全不同的野兽,即使您通常可以使用相同的array[row][column] 语法来处理两者中的元素。

标签: c pointers matrix segmentation-fault


【解决方案1】:

你有三个选择:

  1. 在堆栈(或全局)上分配,就像您显然不想做的那样。该错误可能是因为您认为可以将数组数组视为指向指针的指针,而事实并非如此。

  2. 动态分配,首先是第一个维度,然后为每一行分配第二个维度。您缺少代码中的最后一步。

  3. 使用单个维度动态分配,就像您现在所做的那样,但使​​用例如row * column_length + column 作为索引。

【讨论】:

  • 谢谢。我看过第二个,但希望有一种更清洁的方式。无论如何它都奏效了。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多