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

时间:2015-12-03 17:43:27

标签: c 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 O1中存储更多struct O2并且它可以正常工作,因为在创建sizeof数组时,即使我没有将struct O1乘以任何内容,也必须在某处分配更多内存

我也有一个问题,如何释放阵列?

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

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

但是当我输入free(list->obj)时;它似乎释放了列表中第一个struct O2的obj,free(list[n]->obj)似乎无法正常工作。

1 个答案:

答案 0 :(得分:2)

1创建一个O2数组:

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

2在每个O2中为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);