我有一組測試用C++/CLI編寫,調用本機DLL以遠程測試Windows CE設備。在測試設置過程的兩個點上,分配本地堆上的內存 - 一次爲512個字節,另一個爲572個字節。在這兩種情況下,malloc()最終都會使用CRT堆調用HeapAlloc()。在調用之間,CRT堆的句柄不會改變。這意味着分配572字節的調用失敗,例外0xc0000005(如果需要,我可以嘗試提供代碼示例,但必須找出哪些示例足夠通用,不會破壞NDA)。從託管DLL中調用的非託管DLL調用malloc()會生成訪問衝突
1
A
回答
0
考慮使用一個調試malloc。 Here's an article關於使用DevStudio調試模式以取代malloc和free的特殊調試版本。
1
它看起來像最終解決了問題是沒有使用C運行時堆,但使用GetProcessHeap()或本地堆做分配。
+1
該程序是在調試模式下編譯的,由於某種原因HeapAlloc導致AV(不應該發生)。編寫自己的包裝器HeapAlloc()和HeapFree()似乎已經停止了崩潰,儘管我失去了一定的調試能力,除非我想編寫自己的malloc跟蹤代碼,這完全是一個不同的失眠。 –
相關問題
- 1. 使用非託管DLL訪問衝突
- 2. C#託管的dll調用或非託管的dll調用?
- 3. 從C#調用非託管C++庫(dll)會創建訪問衝突錯誤(0xc0000005)
- 4. 調試非託管的dll
- 5. 從非託管的DLL調用函數
- 6. 從VB調用非託管的DLL
- 7. 從C#調用非託管C++類DLL#
- 8. 從C調用非託管dll困難#
- 9. 從託管代碼調用非託管DLL函數時出錯
- 10. 如何從託管C++調用非託管DLL
- 11. 中止調用到非託管DLL
- 12. 調用非託管dll時出錯
- 13. 從非託管C++調用WCF服務導致訪問衝突
- 14. 非託管的DLL
- 15. 在非託管C++ dll中使用託管c#dll
- 16. Assembly :: LoadFrom從託管C++調用dll
- 17. 從非託管C Dll加載託管C++ Dll?
- 18. 給託管控制句柄非託管代碼 - 訪問衝突
- 19. 無法從64位託管代碼調用32位非託管DLL
- 20. 從非託管win32程序集DLL調用託管代碼 - 崩潰
- 21. 如何從C#代碼調用非託管dll中的函數?
- 22. 從非託管dll中的QThread回調到託管C++主線程
- 23. 從託管代碼調用非託管DLL與固定緩衝區(編碼問題)
- 24. 在c#項目中使用託管dll(它使用非託管dll)
- 25. VC++和C#如何編寫託管DLL或非託管DLL?
- 26. 調用非託管dll殺死進程而不產生異常
- 27. 從C#調用非託管.dll的性能
- 28. 從C#.NET調用非託管DLL所需的教程
- 29. 調用從C#非託管的DLL也許我錯了編組
- 30. 從C#.exe調用非託管C++ .dll的函數
@ildjarn不同意。嘗試分配內存時發生訪問衝突是您的應用程序/進程中某些事情的常見跡象,即它正在覆蓋它不應該做的事情(例如,寫入已分配塊的末尾,寫入無效指針,釋放塊多次等)。 – jdigital
我同意@jdigital,特別是分配函數可能在*堆損壞發生時崩潰(@jdigital列出了幾個可能的原因)。 –
(重複我的問題沒有動機,因爲動機獲得的反饋比問題本身更多。)您可以在不同的機器上重現此問題,還是僅在一臺機器上發生? – ildjarn