1

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

我的结构代码是:

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

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

我的 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:

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

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] 分配内存。谁能告诉我我的方向是否正确?

4

1 回答 1

4

谁能解释我做错了什么?

您正在返回一个指向本地/自动存储持续时间结构的指针,该结构不能保证存在{ }于函数范围之外。


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


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

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

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

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

    return pmazeFilled;
}

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

于 2013-02-23T07:24:01.247 回答