我有以下代码:
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)
似乎无法正常工作。
答案 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);