从托管DLL中调用的非托管DLL调用malloc()会产生访问冲突



我有一套用C++/CLI编写的测试,这些测试调用本机DLL以远程测试Windows CE设备。在测试设置过程中的两个点上,本地堆上的内存被分配——一个为512字节,另一个为572字节。在这两种情况下,malloc()最终都使用CRT堆调用了HeapAlloc()。CRT堆的句柄在两次调用之间没有变化。本应分配572个字节的调用失败,出现异常0xc0000005(如果需要,我可以尝试提供代码示例,但必须弄清楚哪些示例足够通用,不会破坏NDA)。

看起来最终解决问题的不是使用C运行时堆,而是使用GetProcessHeap()或本地堆来进行分配。

考虑使用调试malloc。下面是一篇关于使用DevStudio调试模式来代替malloc和free的特殊调试版本的文章。

最新更新