2010-01-22 24 views
3

我正在分配少量的數據類型,總大小2mb。HeapAlloc返回0xC0000017:沒有足夠的配額

我只使用一個堆,它運行良好,直到我達到一定數量的分配,我非常確定這是因爲我已經評論了一個分配,以便它在下一個崩潰。

配額=磁盤空間?該文檔不包含這個特定功能的錯誤代碼,我已經對應用程序進行了描述,並且有足夠的內存可用於該過程。另外我在堆指針上放置了一個數據斷點,並且不會中斷。當我逐步完成對HeapAlloc的調用時,堆指針正常。

太奇怪了..

+3

指出實現語言會有所幫助。 – 2010-01-22 03:09:54

+0

對不起,msvC++。我使用的是Windows 6.1 SDK,HeapAlloc來自winbase.h – Sorlaize 2010-01-22 03:17:30

+0

「配額不足」是0xC0000017的字符串描述,但常量是STATUS_NO_MEMORY,它由文檔覆蓋。仔細檢查你的分配和假設,或發佈你的代碼。 – 2010-01-22 03:37:11

回答

2

嘗試,直到你判斷錯誤,如果問題是對象或整個堆的#分配的內存大塊(即> 2MB)。另外,你確定你沒有分配超過2MB的內存嗎?當2gb的限制被觸及時,我已經看到了這個錯誤,但是除非你的頁面文件已滿,否則從來沒有在2mb的限制。

如果一切都失敗了,重新啓動或嘗試在不同的機器上。

+0

我只是加載一個1MB文件作爲一個簡單的遊戲的一部分,有沒有辦法可以> 2GB! 分配2GB或3GB失敗..嗯,也許這是與64位指針?我已經重新啓動,我會嘗試在32位虛擬機上進行調試。 – Sorlaize 2010-01-22 03:32:53

+0

所以你可以分配1GB,但不是2GB?是否有可能分配太多內存?也許跟蹤您撥打該分配的次數,以及每次分配的次數。 – Andrew 2010-01-22 05:22:18

+0

是的,我可以分配1GB的罰款,我一定是太亂了指針。我想象了分配情況,所以我可以看到1gb的分配給我留下了500mb左右的餘量,然後在逐步完成問題代碼的時候,整體上沒有超過2gb。 非常感謝您的幫助! – Sorlaize 2010-01-22 05:40:42

1

根據WinNt.h中的值異常代碼C0000017映射到STATUS_NO_MEMORY這是HeapAlloc將拋出的異常之一。所以你要麼是內存不足,要麼你已經溢出了一個分配的緩衝區並損壞了堆。

相關問題