在结构C中初始化变量矩阵

我在C中的结构中初始化变量矩阵时遇到了麻烦。已经阅读了几篇post( post )但我似乎无法修复它。 不要问我为什么,但是对于一项任务,我需要初始化一个位于结构中的矩阵。

我的结构代码是:

typedef struct maze{ int row; int column; char matrix[row][column]; }maze; 

通过调用不同的函数,在读取某个文件后,我需要通过给定的参数初始化矩阵,因此2个参数为“row”和“column”。

我的init函数代码是:

 struct maze* init_maze(int row, int column) { struct maze mazeFilled; struct maze *mazePointer; mazeFilled.row = row; mazeFilled.column = column; return mazePointer; } 

但是你可以猜测这不起作用,人们已经提到很难用2个变量创建一个矩阵。 任何人都可以解释我做错了什么。

编辑1:

我根据结构更改了我的代码,但结构保持不变。 我需要分配指针,以便它甚至在独家新闻之外保持活跃状态​​。

我的init函数的新代码是:

 struct maze* init_maze(void) { int row = 6; int column = 10; struct maze *mazePointer = malloc(sizeof (*mazePointer)); mazePointer->row = row; mazePointer->column = column; return mazePointer; } 

编辑2:

我想我发现了我的错误,我没有为矩阵分配内存。 我的新init函数:

 struct maze* init_maze(void) { int row = 6; int column = 10; maze *mazePointer; mazePointer = malloc(sizeof(maze)); mazePointer->row = row; mazePointer->column = column; mazePointer->matrix = malloc(row * sizeof(char*)); for (int i; i < row; i++) { for(int j; j  matrix[i][j] = malloc(1 * sizeof(char*)); } } return mazePointer; } 

我仍然不确定如何为第一个数组分配内存,[i]。 谁能告诉我,我是否朝着正确的方向前进?

谁能解释我做错了什么?

您将返回指向本地/自动存储持续时间结构的指针,该结构不能保证超出函数的范围{ }


有很多方法可以做到这一点。 目标是返回一个即使在从函数返回后仍保持活动和活动的结构。


更常用的方法是动态分配结构,填充结构并返回指向它的指针。

 struct maze* init_maze(int row, int column) { struct maze *pmazeFilled = malloc(sizeof(*pmazeFilled)); pmazeFilled->row = row; pmazeFilled ->column = column; return pmazeFilled; } 

请记住,调用者必须通过在返回的指针上调用free来释放分配的内存。