我有一套用 C++/CLI 编写的测试,它们调用本机 DLL 以远程测试 Windows CE 设备。在测试设置过程中的两个时间点,本机堆上的内存被分配——一次分配 512 字节,另一次分配 572 字节。在这两种情况下,malloc() 最终都会使用 CRT 堆调用 HeapAlloc()。CRT 堆的句柄在调用之间没有改变。用于分配 572 字节的调用失败,出现异常 0xc0000005(如果需要,我可以尝试提供代码示例,但必须弄清楚哪些示例足够通用,不会破坏 NDA)。
看起来最终解决问题的不是使用 C 运行时堆,而是使用 GetProcessHeap() 或本地堆来进行分配。
考虑使用调试 malloc。 这是一篇关于使用 DevStudio 调试模式来替代 malloc 和 free 的特殊调试版本的文章。