c - 使用经典矩阵而不是动态分配时出现段错误

标签 c matrix

据我所知,这两种创建矩阵的方法应该是相同的:

第一种方式:

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/

相关文章:

c - 如何计算字典中单词中前两个字母的出现频率?

c - 如何设置 if 语句

linux - 如何根据另一列过滤矩阵

c++ - C - 使用 lseek() 获得的不准确的 read() 位置

c - 在不同机器上具有不同输出的并行代码

java - 列出 16x16x16 矩阵中可能存在的最大长方体

java - 如何根据方向 vector 计算旋转矩阵?

c# - Mesh.Effects 输入 XNA

matlab - 如何在 MATLAB 中不使用 for 循环生成这个 3-D 矩阵?

c - 如何访问 cvMat 中的数据