2017-05-05 135 views
-1

當您在同一個變量上多次調用malloc()會發生什麼?我應該如何釋放先前分配的內存?我打算使用struct iovec來存儲數據(以便我可以稍後發送/寫入這些塊)。在調用每個malloc之前,我想保存當前對iovec數組的引用。做完這些之後,我會在同一個變量上調用malloc來獲得固定大小的新內存塊。耗盡後,我將它保存在iovec數組中並再次調用malloc等。我以後可以免費使用iovec陣列嗎?請讓我知道,如果這是正確的方法或建議任何更好的替代方法?多次調用malloc

+0

你可以用'realloc'來代替嗎?我們需要看到一些代碼,以幫助您 – RoiHatam

+0

請發佈您的代碼,很難說出你的意思。您可以創建一個指針數組,並將每個分配保存在一個數組元素中。然後,您可以稍後遍歷數組並釋放所有這些數組。 – Barmar

+0

@RoiHatam:我不想打電話給realloc。因爲在這種情況下它看起來成本很高。 – mehtame026

回答

2

根據您的描述,這聽起來像你正在做類似如下:

var = malloc(sizeof *var); 
do_something_with(var); 
vec[i++] = var; 
var = malloc(sizeof *var); 

如果這是真的,那麼這是可以的(模誤差和完整性檢查) - 你保存參考之前分配的內存在覆蓋var之前。當你做,你會循環vecfree每個元素:

while (i > 0) 
    free(vec[--i]); 

如果你正在做這樣的事情:

var = malloc(sizeof *var); 
do_something_with(var); 
var = malloc(sizeof *var); 

那麼你有一個問題 - 你的慘敗只會引用先前分配的內存,讓您無法訪問或導致內存泄漏。

+0

感謝您的及時回覆。我的做法與第一種方法非常相似。我正在分配固定長度的緩衝區。一旦它已滿,請保存此引用並再次執行malloc()。 – mehtame026

+0

@ mehtame026:那你應該沒問題。 –

+0

謝謝@John .. – mehtame026