我分配使用malloc
存儲和使用後釋放,但在每一個第三操作我注意到malloc
不分配內存。Malloc不返回記憶,爲什麼?
誰能告訴我發生了什麼......爲什麼malloc
是不工作...我應該怎麼辦分配內存?
發佈的代碼是困難的,因爲它涉及到很多很多的文件..主要是我認爲它的運行內存......所以也許我能確定某種方式我多少內存浪費或使用?
我分配使用malloc
存儲和使用後釋放,但在每一個第三操作我注意到malloc
不分配內存。Malloc不返回記憶,爲什麼?
誰能告訴我發生了什麼......爲什麼malloc
是不工作...我應該怎麼辦分配內存?
發佈的代碼是困難的,因爲它涉及到很多很多的文件..主要是我認爲它的運行內存......所以也許我能確定某種方式我多少內存浪費或使用?
正如其他人所指出的,malloc()
正在返回NULL
,因爲您的應用程序運行內存不足(或更確切地說,虛擬地址空間)。
如果我理解你的描述正確,你就成功地運行相同的工作量的兩倍,但你嘗試了第三次,你出的內存。
基本上有兩件事情可以發生在這裏:
你leaking memory。 (我看到你說你釋放了你使用的內存,但意外泄漏內存非常容易。)你可以在Visual C++的內置漏洞檢測功能here上找到相關信息。
你fragmenting memory。隨着應用程序開始使用可用32位地址空間的重要部分,碎片開始成爲一個真正的問題。不幸的是,不是一個真正的切割和乾燥的解決了這個問題,但是看看這些所謂的問題的詳細資料:
How to avoid heap fragmentation?
對於這個非常含糊的問題,這是一個很好的答案 – bobobobo 2010-08-17 13:24:57
有沒有辦法讓malloc根本不會返回並崩潰? – Bionix1441 2017-02-02 14:48:29
你能發表一些代碼嗎? – Naveen 2010-08-16 10:14:12
__你分配多少內存?這很重要。 – bobobobo 2010-08-16 11:40:03
您的應用程序是32位還是64位? (來自「visual-C++」標籤,我假設你在Windows上運行。) – 2010-08-16 13:04:47