簡體   English   中英

為什么malloc總是返回NULL

[英]Why malloc always return NULL

我的開發環境是VS2008,DX9,Windows XP。 我嘗試在內存不足的情況下添加保護處理。 當malloc返回NULL時,我會將一些資源寫入磁盤,並釋放內存中的資源。

但有時,malloc總是返回NULL,即使我釋放了大部分資源和進程內存使用量,並且任務管理器中的VM大小只有800MB。

我認為使用malloc分配88個字節應該沒問題,其中進程內存使用量僅為800MB。 但malloc總是返回NULL。

這可能是內存碎片嗎? 它看起來不像那樣,因為進程內存使用量不是太多。

alt text http://i.imagehost.org/0267/Snap2.jpg

你提到了內存碎片,這肯定是我的第一個猜測。 嘗試下載應用程序。 它叫做地址空間監視器 ,應該能夠告訴你它是否存在碎片問題。

它可能是虛擬地址空間碎片。 檢查的一種方法是調用HeapCompact(GetProcessHeap(), 0) 如果這釋放了足夠的內存,那么這就是可能的原因。

另一個類似的原因是從調試器啟動; 導致Windows使用調試堆,調試堆在很長一段時間內確實存在非常糟糕的內存行為。 要禁用該行為,請在環境中設置_NO_DEBUG_HEAP=1並運行。

另一種可能性是程序中可能存在錯誤。 你認為你要求88字節,但也許你傳遞一個未初始化的變量並要求數百兆字節。 或者也許你之前做的事情超過了緩沖區並破壞了堆,導致malloc()在此之后永遠失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM