gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:13 25 4
gpt4 key购买 nike

我有以下代码:

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 O1 并且它起作用了,所以一定在某处分配了更多的内存,即使我没有创建 struct O1 的数组时,将 sizeof 乘以任何值。

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

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

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

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

最佳答案

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);

关于c - 如何释放结构内的结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34072729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com