2010-08-16 51 views
0

我分配使用malloc存儲和使用後釋放,但在每一個第三操作我注意到malloc不分配內存。Malloc不返回記憶,爲什麼?

誰能告訴我發生了什麼......爲什麼malloc是不工作...我應該怎麼辦分配內存?

發佈的代碼是困難的,因爲它涉及到很多很多的文件..主要是我認爲它的運行內存......所以也許我能確定某種方式我多少內存浪費或使用?

+1

你能發表一些代碼嗎? – Naveen 2010-08-16 10:14:12

+0

__你分配多少內存?這很重要。 – bobobobo 2010-08-16 11:40:03

+0

您的應用程序是32位還是64位? (來自「visual-C++」標籤,我假設你在Windows上運行。) – 2010-08-16 13:04:47

回答

0

你爲什麼認爲「malloc沒有分配內存」?它是否返回NULL,或者您在查看某些系統內存統計信息。如果是後者,它可能是因爲你的C庫實現保留在以前分配的內存上,而不是直接返回給系統。

+0

MALLOC時返回NULL – SPB 2010-08-16 11:19:18

+1

@SPB:這意味着malloc的內存耗盡。 – MSalters 2010-08-16 11:37:41

3

正如其他人所指出的,malloc()正在返回NULL,因爲您的應用程序運行內存不足(或更確切地說,虛擬地址空間)。

如果我理解你的描述正確,你就成功地運行相同的工作量的兩倍,但你嘗試了第三次,你出的內存。

基本上有兩件事情可以發生在這裏:

  1. leaking memory。 (我看到你說你釋放了你使用的內存,但意外泄漏內存非常容易。)你可以在Visual C++的內置漏洞檢測功能here上找到相關信息。

  2. fragmenting memory。隨着應用程序開始使用可用32位地址空間的重要部分,碎片開始成爲一個真正的問題。不幸的是,不是一個真正的切割和乾燥的解決了這個問題,但是看看這些所謂的問題的詳細資料:

    How to avoid heap fragmentation?

    How to solve Memory Fragmentation

    Memory management in memory intensive application

+0

對於這個非常含糊的問題,這是一個很好的答案 – bobobobo 2010-08-17 13:24:57

+0

有沒有辦法讓malloc根本不會返回並崩潰? – Bionix1441 2017-02-02 14:48:29