2

我有一个 .NET 应用程序,它使用开源 C++ 压缩库来压缩图像。我们正在通过托管 C++ 访问 C++ 库。我在压缩期间看到堆损坏。对 _CrtIsValidHeapPointer 的调用在压缩后清理时发现调用 free() 时出错。

是否有诸如Purify之类的工具来帮助诊断此问题,以及在托管和非托管代码的组合中工作时导致堆损坏的原因是什么?我确实在调试器中捕获了异常,但如果有其他工具可以帮助找到问题的解决方案,那就太好了。

4

3 回答 3

1

*nix上,有一个名为Valgrind的工具,我用它来处理内存问题,例如内存泄漏和内存损坏。

于 2008-08-29T18:40:35.020 回答
1

在本机代码中,如果损坏总是发生在内存中的同一位置,则可以在更改内存时使用数据断点来中断调试器。不幸的是,您不能在托管 C++ 环境中设置数据断点,大概是因为 GC 可能会在内存中移动对象。

不确定这是否有帮助,但希望它能引导你朝着正确的方向前进。

于 2008-08-29T19:58:37.720 回答
0

Rational Purify for Windows支持 .NET,所以我想可以使用它。

于 2008-08-29T18:40:03.600 回答