如何释放结构内的结构数组?
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 O1
s 并且它起作用了,所以一定在某处分配了更多的内存,即使我在创建 [=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);
我有以下代码。:
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
s 并且它起作用了,所以一定在某处分配了更多的内存,即使我在创建 [=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);