代码如下:
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*
当你这样做的时候会有一系列的问题。正确的方法是:
为
2
int*
分配内存。为每个
int*
分配内存以保存int
s。