[英]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.