据我所知,这两种创建矩阵的方法应该是相同的:
第一种方式:
int i;
int **matrix = (int**)malloc(R*sizeof(int*));
for (i=0; i<R; i++)
matrix[i] = (int*)malloc(C*sizeof(int));
第二种方式:
int matrix[R][C];
R 和 C 声明为:
#define R 3
#define C 5
我的问题是,当我将第二种方式声明的矩阵传递给这样的函数时:
void myfunction(int **m, int rows, int columns);
使用代码:
myfunction(matrix,R,C);
为什么在我尝试触摸矩阵内的值时立即出现段错误?
当我将第一种方式声明的矩阵传递给这样的函数时,也会发生同样的情况:
void myfunction(int m[][C], int rows, int columns);
我错过了什么?
最佳答案
第一种方法是将指针数组分配给已分配的 int 数组。 第二种方法分配单个数组并使用 C 参数计算正确的偏移量。
它们不可互换。
参见 the bottom part of this page对于差异。
关于c - 使用经典矩阵而不是动态分配时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19364842/