在 C 中释放结构内的结构

Freeing a struct within a struct in C

所以,我在 C 中工作,我正在分配一个结构类型的数组,并且在该结构中我还在分配另一个不同结构的数组。

typedef struct {
    char name[MAX_NAME + 1];
    ITEM *items;
} database;

typedef struct {
    char name[NAME_MAX + 1];
}ITEM;
database *array = (database*)malloc(n1 * sizeof(database));

array[i].items = (ITEM*)calloc(n2 * sizeof*(ITEM));

命令 free(array); 是否负责释放整个东西,包括我在其中分配的 ITEM 数组?

不,您需要释放 calloc()malloc() 完成的每个数据分配。

几点
  • calloc(n2 * sizeof*(ITEM)); 是完全错误的。你需要这样写
array[i].items = calloc(n2, sizeof(ITEM));
  • 您不需要对从 malloc()calloc()
  • 返回的值进行类型转换
  • 始终通过检查指针 NULL
  • 来检查 heap-allocation 是否成功
  • struct ITEM 应该在 struct database 之前声明,以避免 forward-declaration 错误
  • 您需要使用循环释放资源,该循环将迭代到 n1
for (size_t i = 0; i < n1; i++)
{
    free(array[i].items);
}
free(array);