2011-06-28 75 views
1

我有一組測試用C++/CLI編寫,調用本機DLL以遠程測試Windows CE設備。在測試設置過程的兩個點上,分配本地堆上的內存 - 一次爲512個字節,另一個爲572個字節。在這兩種情況下,malloc()最終都會使用CRT堆調用HeapAlloc()。在調用之間,CRT堆的句柄不會改變。這意味着分配572字節的調用失敗,例外0xc0000005(如果需要,我可以嘗試提供代碼示例,但必須找出哪些示例足夠通用,不會破壞NDA)。從託管DLL中調用的非託管DLL調用malloc()會生成訪問衝突

+2

@ildjarn不同意。嘗試分配內存時發生訪問衝突是您的應用程序/進程中某些事情的常見跡象,即它正在覆蓋它不應該做的事情(例如,寫入已分配塊的末尾,寫入無效指針,釋放塊多次等)。 – jdigital

+0

我同意@jdigital,特別是分配函數可能在*堆損壞發生時崩潰(@jdigital列出了幾個可能的原因)。 –

+0

(重複我的問題沒有動機,因爲動機獲得的反饋比問題本身更多。)您可以在不同的機器上重現此問題,還是僅在一臺機器上發生? – ildjarn

回答

0

考慮使用一個調試malloc。 Here's an article關於使用DevStudio調試模式以取代malloc和free的特殊調試版本。

1

它看起來像最終解決了問題是沒有使用C運行時堆,但使用GetProcessHeap()或本地堆做分配。

+1

該程序是在調試模式下編譯的,由於某種原因HeapAlloc導致AV(不應該發生)。編寫自己的包裝器HeapAlloc()和HeapFree()似乎已經停止了崩潰,儘管我失去了一定的調試能力,除非我想編寫自己的malloc跟蹤代碼,這完全是一個不同的失眠。 –