簡體   English   中英

在 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的指針來檢查堆分配是否成功
  • struct 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM