gpt4 book ai didi

c - 为结构中的二维数组赋值是段错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:44 25 4
gpt4 key购买 nike

代码如下:

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 应该是一个二维数组/指针,我只是想为该数组赋值。

它在这一行出现段错误: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 分配内存。当您对该内存使用 element[0] 时,您将 int 视为 int*。这样做会出现一系列问题。

正确的做法是:

  1. 2 int* 分配内存。
  2. 为每个 int* 分配内存以容纳 int

关于c - 为结构中的二维数组赋值是段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23350795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com