我在C中的结构中初始化变量矩阵时遇到了问题。已经阅读了几篇帖子(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 < column; j++) {
mazePointer -> matrix[i][j] = malloc(1 * sizeof(char*));
}
}
return mazePointer;
}
我仍然不确定如何为第一个数组分配内存,[i]。谁能告诉我,我是否朝着正确的方向前进?
答案 0 :(得分:4)
有人能解释我做错了吗?
您正在返回指向本地/自动存储持续时间结构的指针,该结构不能保证超出函数范围{ }
。
有很多方法可以做到这一点。目标是返回一个结构,即使从函数返回后仍保持活动状态。
更常用的方法是动态分配结构,填充结构并返回指向它的指针。
struct maze* init_maze(int row, int column)
{
struct maze *pmazeFilled = malloc(sizeof(*pmazeFilled));
pmazeFilled->row = row;
pmazeFilled ->column = column;
return pmazeFilled;
}
请记住,调用者必须通过在返回的指针上调用free
来释放已分配的内存。