C int矩阵中的分段错误

C int矩阵中的分段错误,c,pointers,matrix,segmentation-fault,C,Pointers,Matrix,Segmentation Fault,我在试验一些基本的C代码,它用指针定义了一个int矩阵 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

我在试验一些基本的C代码,它用指针定义了一个
int
矩阵

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;
}
typedef int**矩阵;
矩阵createMatrix(整数行、整数列){
int i,j;
矩阵m=(矩阵)malloc(sizeof(int)*行*列);
对于(i=0;i
但是,这些
m[i][j]
访问会抛出分段错误。这里怎么了?星号太多了


我确信指向int的指针实际上与矩阵相同。

分配
矩阵
数据项时,假设您使用单个索引线性访问它。如果您想使用两个索引访问它,例如,
m[1][1]
您需要分配每个维度:

Matrix m = malloc(sizeof(int *) * lines);

for ( int i = 0; i < lines; i++ )
    m[i] = malloc(sizeof(int) * columns);
矩阵m=malloc(sizeof(int*)*行); 对于(int i=0;i
还要注意,

您对
矩阵
数据项的分配假定您使用单个索引线性访问它。如果您想使用两个索引访问它,例如,
m[1][1]
您需要分配每个维度:

Matrix m = malloc(sizeof(int *) * lines);

for ( int i = 0; i < lines; i++ )
    m[i] = malloc(sizeof(int) * columns);
矩阵m=malloc(sizeof(int*)*行); 对于(int i=0;i
另外请注意您。

您是否包含了
stdlib.h
?在本网站上查看有关“如何分配二维阵列”的其他问题,有许多工作示例。您知道阵列和指针之间的区别吗?指向指针的指针、指针数组和数组数组是完全不同的东西(尽管第二个指针可以与第一个指针一起指向)。您是否包括了
stdlib.h
?请在此网站上查看有关“如何分配二维数组”的其他问题,有很多工作示例您知道数组和指针之间的区别吗?指向指针的指针、指针数组和数组数组是完全不同的东西(尽管第二个指针可以和第一个指针一起指向)。愚蠢的错误。单独分配每个数组是有意义的。@afsantos当有人第一次学习分配多维数组时,这实际上是很常见的。查看it的方法是将
m[i][j]
m
地址索引
i
,并将
j
m[i]
地址索引。愚蠢的错误。单独分配每个数组是有意义的。@afsantos当有人第一次学习分配多维数组时,这实际上是很常见的。查看it的方法是对
m[i][j]
地址的
i
进行索引,并对
m[i][/code>地址的
j
进行索引。