c-为结构中的二维数组赋值是segforcing



以下是代码:

typedef struct _Matrix {
    int rows;
    int cols;
    int** elements;
} Matrix;
int main(int argc, char* argv[])
{
    Matrix *matrix1;
    matrix1 = malloc(sizeof(Matrix));
    matrix1->rows = 2;
    matrix1->cols = 2;
    matrix1->elements = malloc(sizeof(int) * 4);
    matrix1->elements[0][0] = 1;
    matrix1->elements[0][1] = 2;
    matrix1->elements[1][0] = 3;
    matrix1->elements[1][1] = 4;
}

我不确定我在这里错过了什么。matrix1->elements应该是一个2d数组/指针,我只是想给这个数组赋值。

它在这一行发生故障:matrix1->elements[0][0] = 1;

替换行:

matrix1->elements = malloc(sizeof(int) * 4);

通过

matrix1->elements = malloc(sizeof(int*) * 2);
matrix1->elements[0] = malloc(sizeof(int) * 2);
matrix1->elements[1] = malloc(sizeof(int) * 2);

第一行为4 int s分配内存。当您在该内存上使用element[0]时,您将int视为int*。当你这样做的时候会有一系列的问题。

正确的方法是:

  1. 2 int*分配内存
  2. 为这些int*中的每一个分配存储器以保持ints

相关内容

  • 没有找到相关文章

最新更新