查找内存违规/泄漏

时间:2010-12-14 12:55:42

标签: c++ visual-studio memory-management memory-leaks openssl

我有一个在VC 2008(C ++)中开发的应用程序,它使用了使用openssl dll的轴dll。链中的某个人会破坏堆 - 这种情况最终会导致我的应用程序出现“内存访问冲突”,违规行为不应该/不可能发生。因此,链轴ssl中的某个人会腐败一些东西,但我找不到谁或者什么。

我尝试使用DevPartner的工具进行内存泄漏,但它没有发现泄漏 - 没有任何泄漏。

我该如何处理这个问题?我多次查看了轴和ssl文档,并实现并检查了所有可能的内存管理问题和修复,但无济于事。

非常感谢! 马林

4 个答案:

答案 0 :(得分:3)

尝试使用MS application verifier。它与Visual Studio集成,因此您可以直接从它运行“验证”。

答案 1 :(得分:3)

为什么你认为泄密可能以某种方式造成腐败?你需要注意越界访问,死指针访问,非法转换和类似的事情,而不是泄漏。这是一个棘手的事情。 Valgrind是追逐这类问题的绝佳工具,但遗憾的是它不适用于Win32。如果您的代码是可移植的,您可以尝试在Linux上进行调试,否则您需要使用像Purify这样的商业工具,或者使用日志和断言,以及调试器。 / p>

答案 2 :(得分:2)

如果您获得了库的调试版本,MSVC提供了一个免费的调试malloc,以及一个调试new和delete。这些包含覆盖检测等内容。

http://msdn.microsoft.com/en-us/library/bebs9zyz.aspx

答案 3 :(得分:1)

可能是这篇MSDN文章可能有您正在寻找的答案: Finding a Memory Leak

您也可以尝试使用此LeakDiag工具。不确定为什么在MSDN中没有引用它?!?!?但Codeproject.com

中有一篇很好的文章