int 矩阵中的分段错误
Segmentation fault in int matrix
我正在试验一些用指针定义 int
矩阵的基本 C 代码。
typedef int **Matrix;
Matrix createMatrix(int lines, int columns) {
int i, j;
Matrix m = (Matrix) malloc(sizeof(int) * lines * columns);
for (i = 0; i < lines; ++i) {
for (j = 0; j < columns; ++j) {
m[i][j] = 0;
}
}
return m;
}
int main(int argc, char**argv) {
Matrix m = createMatrix(5, 10);
// ...
if (m[2][3] == 20) {
// ...
}
return 0;
}
但是,这些 m[i][j]
访问会引发分段错误。这里出了什么问题?星号太多?
我确信指向 int 指针的指针实际上与矩阵相同。
您对 Matrix
数据项的分配假定您使用单个索引线性访问它。如果你想用两个索引访问它,例如,m[1][1]
你需要分配每个维度:
Matrix m = malloc(sizeof(int *) * lines);
for ( int i = 0; i < lines; i++ )
m[i] = malloc(sizeof(int) * columns);
另请注意,您 should not type cast malloc
。
我正在试验一些用指针定义 int
矩阵的基本 C 代码。
typedef int **Matrix;
Matrix createMatrix(int lines, int columns) {
int i, j;
Matrix m = (Matrix) malloc(sizeof(int) * lines * columns);
for (i = 0; i < lines; ++i) {
for (j = 0; j < columns; ++j) {
m[i][j] = 0;
}
}
return m;
}
int main(int argc, char**argv) {
Matrix m = createMatrix(5, 10);
// ...
if (m[2][3] == 20) {
// ...
}
return 0;
}
但是,这些 m[i][j]
访问会引发分段错误。这里出了什么问题?星号太多?
我确信指向 int 指针的指针实际上与矩阵相同。
您对 Matrix
数据项的分配假定您使用单个索引线性访问它。如果你想用两个索引访问它,例如,m[1][1]
你需要分配每个维度:
Matrix m = malloc(sizeof(int *) * lines);
for ( int i = 0; i < lines; i++ )
m[i] = malloc(sizeof(int) * columns);
另请注意,您 should not type cast malloc
。