int矩阵中的分段错误

afs*_*tos 0 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) {
            m[i][j] = 0;
        }
    }
    return m;
}

int main(int argc, char**argv) {
    Matrix m = createMatrix(5, 10);
    // ...
    if (m[2][3] == 20) {
        // ...
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,这些m[i][j]访问会导致分段错误.这有什么不对?太多的星号?

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

lur*_*ker 6

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

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

for ( int i = 0; i < lines; i++ )
    m[i] = malloc(sizeof(int) * columns);
Run Code Online (Sandbox Code Playgroud)

另请注意,您不应键入强制转换malloc.