所以,我在 C 語言中作業,我正在分配一個 struct 型別的陣列,并且在該結構中我還分配了另一個不同結構的陣列。
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 陣列?
uj5u.com熱心網友回復:
不,您需要釋放由calloc()or完成的每一個資料分配malloc()。
幾點
calloc(n2 * sizeof*(ITEM));是完全錯誤的。你需要這樣寫
array[i].items = calloc(n2, sizeof(ITEM));
- 您不需要對從
malloc()and回傳的值進行型別轉換calloc() - 始終通過檢查指標來檢查堆分配是否成功
NULL - struct
ITEM應該在 struct 之前宣告database,以避免前向宣告錯誤 - 您需要使用回圈來釋放資源,該回圈將迭代直到
n1
for (size_t i = 0; i < n1; i )
{
free(array[i].items);
}
free(array);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/464199.html
上一篇:如何從最小的數字開始?
下一篇:代碼塊輸出不同于在線編譯器
