假設有一個結構體 a 與其他結構體作為成員
struct a {
struct b* b;
struct c* c;
};
struct a* a1;
現在我將記憶體動態分配給一個物件
a1 = (struct a*) malloc(sizeof(a));
現在我同樣創建了一個新的 struct b 物件
struct b* b1 = (struct b*) malloc(sizeof(b));
現在在代碼中經過一段時間后,我在 a1 中為 b1 創建了一個參考
a1.b = b1;
b1 = NULL;
稍后如果我釋放 a1,分配給 b1 的記憶體也會被釋放嗎?
free(a1);
uj5u.com熱心網友回復:
以后如果我釋放a1,分配給b1的記憶體也會被釋放嗎
不,它不會。規則非常簡單:
free每個正好一個malloc(假設我們確實想釋放記憶體)- 傳遞給的地址
free必須與先前回傳的地址完全相同malloc。
當然,這里malloc也適用于任何其他分配函式,例如calloc,realloc等。因此在您的示例中,所需的free呼叫是:
free(a1.b);
free(a1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/456451.html
