如何释放结构内的结构数组?

How to free an array of structures inside a structure?

我有以下代码。:

struct O1 {
    int a;
    int b;
    int c;
};

struct O2 {
    int f;
    int g;
    struct O1 *array;      //pointer to an array of structs O1
};

struct O2 *list = malloc(25 * sizeof(struct O1));        //array of 25 structs O2

struct O1 *innerlist = malloc(sizeof(struct O1));    //array of structs O1 contained inside each struct O2

innerlist[0].a = 1;
innerlist[0].b = 2;
innerlist[0].c = 3;

(*list)[0].f = 1;
(*list)[0].g = 1;
(*list)[0].array = &innerlist[0];    //filling the parameters via some loop for example

所以我的问题是,我是否正确分配了数组?

对于每个 struct O2 中包含的内部结构,我只想要一个只有一个元素(一个 struct O1)的数组,然后我可以通过 realloc 进一步扩展但是我尝试在 struct O2 中存储更多的 struct O1s 并且它起作用了,所以一定在某处分配了更多的内存,即使我在创建 [=12] 的数组时没有将 sizeof 乘以任何东西=].

我也有一个问题,如何释放数组?

我想我必须先释放内部数组,但我在这里遇到了麻烦。

我创建了一个释放内存的函数,它将 struct O2 的数组作为参数。

但是当我输入 free(list->obj);它似乎正在释放列表中第一个 struct O2 的对象,而 free(list[n]->obj) 似乎不起作用。

1 创建O2数组:

struct O2 *list = malloc(25 * sizeof(struct O2)); 

2 在每个 O2 中分配 space 给 1 个 O1

for (int i = 0; i < 25; i++) {
    list[i].array = malloc(sizeof(struct O1));
}

3 释放内存

for (int i = 0; i < 25; i++) {
    free(list[i].array);
}
free(list);