簡體   English   中英

動態分配的內存中free()的范圍是什么?

[英]What is the scope of free() in dynamically allocated memory?

假設我有以下代碼:

typedef struct {
  int numBars;
  BarType *bars;
} fooType;

foo = (fooType *) malloc(sizeof(fooType));
foo->bars = (BarType *) malloc(sizeof(barType));

調用free(foo)也會釋放條或我需要這樣做:

free(foo->bars);
free(foo);

憑直覺,我覺得調用free(foo)就足夠了-如果我不需要調用free(foo-> numBars),則不需要調用free(foo-> bars)。 但是我不必為numBars手動分配內存,而為bar則需要手動分配內存。

對於每個malloc您都需要一個free 沒有任何事情可以為您“自動”完成。

需要注意的是,違背了你的要求,你實際上沒有分配任何內存bars ,就像你不必為分配內存numBars 但是,您正在*bars分配內存。

單顆星可以在C ...

通過使用此命令:foo =(fooType *)malloc(sizeof(fooType)); 您實際上是在為“ fooType”結構分配內存,該結構只有一個指針來保存另一個分配的內存塊的地址(為barType分配了m)。

您必須顯式釋放每個已分配的內存。 否則,如果僅使用free(foo)。 它將導致內存泄漏( http://en.wikipedia.org/wiki/Memory_leak )!

free()非常簡單:它釋放傳遞給它的內存塊,該內存塊必須來自malloc() 它不執行任何級聯釋放或其他清除操作。 它還不會使指針為NULL以幫助捕獲簡單的邏輯錯誤。

free(foo->bars);
free(foo);
foo = NULL;   /* good idea to do this, unless `foo` is going out of scope soon */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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