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

初始化结构C中的变量矩阵,c,matrix,struct,initialization,C,Matrix,Struct,Initialization,我在C语言中初始化结构中的变量矩阵时遇到问题。我读了几篇博文(),但似乎无法修复它。不要问我为什么,但对于赋值,我需要初始化位于结构中的矩阵 我的结构代码是: typedef struct maze{ int row; int column; char matrix[row][column]; }maze; 通过调用不同的函数,在读取某个文件后,我需要根据给定的参数初始化一个矩阵,因此需要两个参数“row”和“column” 我的init函数代码是: struct ma

我在C语言中初始化结构中的变量矩阵时遇到问题。我读了几篇博文(),但似乎无法修复它。不要问我为什么,但对于赋值,我需要初始化位于结构中的矩阵

我的结构代码是:

typedef struct maze{
    int row;
    int column;
    char matrix[row][column];
}maze;
通过调用不同的函数,在读取某个文件后,我需要根据给定的参数初始化一个矩阵,因此需要两个参数“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;
}
但是你可以猜到这是行不通的,人们已经提到很难用两个变量创建一个矩阵。谁能解释一下我做错了什么

编辑1:

我根据帖子修改了代码,但结构保持不变。我需要分配指针,以便它在独家新闻之外保持活动状态

我的init funct新代码是:

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:

如果我发现了我的错误,我没有为矩阵分配内存。 我的新初始化函数:

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;

}
struct maze*init_maze(void){
int行=6;
int列=10;
迷宫*马塞冬;
mazePointer=malloc(sizeof(迷宫));
马塞潘特->行=行;
马塞潘特->列=列;
mazePointer->matrix=malloc(行*sizeof(字符*);
for(int i;i矩阵[i][j]=malloc(1*sizeof(char*));
}
}
返回马塞冬;
}
我仍然不确定如何仅为第一个数组[I]分配内存。有人能告诉我我的方向是否正确吗

有人能解释一下我做错了什么吗?

您正在返回指向本地/自动存储持续时间结构的指针,该结构不保证存在于函数的作用域
{}
之外


有很多方法可以做到这一点。其目的是返回一个即使从功能返回后仍保持活动的结构


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

struct maze* init_maze(int row, int column) 
{

    struct maze *pmazeFilled = malloc(sizeof(*pmazeFilled));

    pmazeFilled->row = row;
    pmazeFilled ->column = column;

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

有人能解释一下我做错了什么吗?

您正在返回指向本地/自动存储持续时间结构的指针,该结构不保证存在于函数的作用域
{}
之外


有很多方法可以做到这一点。其目的是返回一个即使从功能返回后仍保持活动的结构


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

struct maze* init_maze(int row, int column) 
{

    struct maze *pmazeFilled = malloc(sizeof(*pmazeFilled));

    pmazeFilled->row = row;
    pmazeFilled ->column = column;

    return pmazeFilled;
}

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

您的
init_maze()
函数初始化一个局部变量,然后该变量未使用并消失,然后返回一个指向另一个局部变量的未初始化指针。这应该做什么?我想做的是用2个给定的参数初始化init_迷宫函数中的结构,所以row和column然后你需要
malloc()
ate内存。所以为了扩展被初始化的结构的范围,我需要在初始化“init_迷宫”函数中的结构时使用malloc?是的,或者传入另一个驻留在调用方作用域中的本地变量的地址,该地址也是有效的(想想stdlib函数,如
strtok()
)。您的
init_maze()
函数初始化一个本地变量,然后该变量未使用并消失,然后返回一个指向另一个本地变量的未初始化指针。这应该做什么?我想做的是用2个给定的参数初始化init_迷宫函数中的结构,所以row和column然后你需要
malloc()
ate内存。所以为了扩展被初始化的结构的范围,我需要在初始化“init_迷宫”函数中的结构时使用malloc?是的,或者传入另一个驻留在调用方作用域中的局部变量的地址,该地址也是有效的(想想stdlib函数,比如
strtok()
)。我以为该结构是用“struct maze mazeFilled”初始化的;指针也是如此。由于使用了
sizeof(*mpazeFilled),我有一种向上投票的冲动
而不是
sizeof(SomeUnliguousAndriskyTypeName)
@kiptScridy:该结构是函数的本地结构,并不存在于函数之外,因此指针指向函数返回后不存在的内容。@AlokSave谢谢,先生,这很有道理。@kiptscridy上面的例子是您的简化版本:您需要在结构中声明
char**matrix
成员,而不是
char matrix[nrow][ncol]
。然后,您需要正确分配空间并初始化指针。我认为该结构是用“struct maze mazeFilled”初始化的;指针也是如此。由于您使用了
sizeof(*mpaazefilled)
而不是
sizeof(一些模棱两可的类型名称),因此我迫切需要对此进行更新
@kiptscridy:该结构是函数的本地结构,并不存在于函数之外,因此指针指向函数返回后不存在的内容。@AlokSave谢谢,先生,这很有道理。@kiptscridy上面的例子是您的简化版本:您需要在结构中声明
char**matrix
成员,而不是
char matrix[nrow][ncol]
。然后,您需要正确地为此分配空间并初始化指针。