[英]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
的指針來檢查堆分配是否成功ITEM
應該在 struct database
之前聲明,以避免前向聲明錯誤n1
for (size_t i = 0; i < n1; i++)
{
free(array[i].items);
}
free(array);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.