當您在同一個變量上多次調用malloc()會發生什麼?我應該如何釋放先前分配的內存?我打算使用struct iovec來存儲數據(以便我可以稍後發送/寫入這些塊)。在調用每個malloc之前,我想保存當前對iovec數組的引用。做完這些之後,我會在同一個變量上調用malloc來獲得固定大小的新內存塊。耗盡後,我將它保存在iovec數組中並再次調用malloc等。我以後可以免費使用iovec陣列嗎?請讓我知道,如果這是正確的方法或建議任何更好的替代方法?多次調用malloc
回答
根據您的描述,這聽起來像你正在做類似如下:
var = malloc(sizeof *var);
do_something_with(var);
vec[i++] = var;
var = malloc(sizeof *var);
如果這是真的,那麼這是可以的(模誤差和完整性檢查) - 你保存參考之前分配的內存在覆蓋var
之前。當你做,你會循環vec
到free
每個元素:
while (i > 0)
free(vec[--i]);
如果你正在做這樣的事情:
var = malloc(sizeof *var);
do_something_with(var);
var = malloc(sizeof *var);
那麼你有一個問題 - 你的慘敗只會引用先前分配的內存,讓您無法訪問或導致內存泄漏。
感謝您的及時回覆。我的做法與第一種方法非常相似。我正在分配固定長度的緩衝區。一旦它已滿,請保存此引用並再次執行malloc()。 – mehtame026
@ mehtame026:那你應該沒問題。 –
謝謝@John .. – mehtame026
- 1. snprintf調用malloc或snprintf不調用malloc
- 2. 多次調用
- 3. didUpdateToLocation多次調用
- 4. Overlay.draw()多次調用
- 5. Android:OnPrimaryClipChangedListener()多次調用
- 6. 多次調用ReactDOM.render
- 7. onReceive多次調用
- 8. sliderValueDidChange多次調用
- 9. 多次調用MouseListener
- 10. InitWithCoder多次調用
- 11. GetView調用多次
- 12. 多次調用setcontentview?
- 13. ABAddressBookRegisterExternalChangeCallback多次調用
- 14. 多次調用registerUserNotificationSettings
- 15. 多次調用startforeground?
- 16. 多次調用GCE
- 17. onPerformSync()多次調用
- 18. OnPrimaryClipChangedListener多次調用
- 19. 多次調用CryptHashData
- 20. observeValueForKeyPath多次調用
- 21. ON_EN_KILLFOCUS多次調用
- 22. 多次調用xively.feed.history()
- 23. 多次調用UIDeviceOrientationDidChangeNotification
- 24. 多次調用NSManagedObjectContextDidSaveNotification
- 25. LeveyPopListView多次調用
- 26. 多次調用async_accept
- 27. 多次調用Gridster
- 28. Ajax回調調用多次
- 29. 當動態分配數組的函數被多次調用時malloc錯誤?
- 30. 使用宏調用malloc
你可以用'realloc'來代替嗎?我們需要看到一些代碼,以幫助您 – RoiHatam
請發佈您的代碼,很難說出你的意思。您可以創建一個指針數組,並將每個分配保存在一個數組元素中。然後,您可以稍後遍歷數組並釋放所有這些數組。 – Barmar
@RoiHatam:我不想打電話給realloc。因爲在這種情況下它看起來成本很高。 – mehtame026