C ++内存泄漏自动检测库

时间:2011-04-03 16:10:43

标签: c++ memory

我正在寻找内存泄漏检测库。 像我一样将它包含在源代码中然后它应该开始检测。外部程序可能是好的,但我正在寻找一些可以链接到可执行文件的库。
这是我在寻找Windows。

6 个答案:

答案 0 :(得分:4)

我可以建议使用Visual Leak Detector,它比Visual Studio内置的更容易使用。

答案 1 :(得分:4)

您可以在代码中使用某些技术来检测内存泄漏。最常见,最简单的检测方法是,定义一个宏,例如DEBUG_NEW并使用它,以及预定义的宏,如__FILE____LINE__,以找到代码中的内存泄漏。这些预定义的宏告诉您内存泄漏的文件和行号。

DEBUG_NEW只是一个MACRO,通常定义为:

#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW

因此,无论您在何处使用new,它都可以跟踪可用于查找程序中内存泄漏的文件和行号。

__FILE____LINE__predefined macros,分别评估您使用它们的文件名和行号!

阅读以下文章,该文章解释了将DEBUG_NEW与其他有趣的宏一起使用的技巧,非常漂亮:

A Cross-Platform Memory Leak Detector


来自Wikpedia

  

Debug_new是指C ++中的一种技术   过载和/或重新定义操作员   new和operator delete为了   拦截内存分配和   解除分配调用,从而调试一个   内存使用程序。 经常   涉及定义一个名为的宏   DEBUG_NEW,让新成为   像new(_ FILE _,_ LINE _)   记录文件/行信息   分配。 Microsoft Visual C ++使用   这种技术在微软   基础课程。有一些   扩展此方法以避免的方法   仍然使用宏重新定义   能够显示文件/行   某些平台上的信息。那里   这有很多固有的局限性   方法。它仅适用于C ++和   无法通过C捕获内存泄漏   像malloc这样的函数。但是,它可以   使用非常简单,而且非常简单   比较快一些   完整的内存调试解决方案。

答案 2 :(得分:2)

Visual Studio在Windows上有这样的功能。见http://msdn.microsoft.com/en-us/library/e5ewb1h3(v=VS.90).aspx。在linux下我不知道是否存在这样的东西,但valgrind非常适合找到所有类型的内存问题(不仅是泄漏,而且还有无效的读取)。

答案 3 :(得分:2)

对我而言,这是很长一段时间内最好的工具:  http://www.paulnettle.com/pub/FluidStudios/MemoryManagers/Fluid_Studios_Memory_Manager.zip 只需包含1个头文件,您就完成了它:)

答案 4 :(得分:0)

如果您使用的是VC ++,则会内置该功能。对于非MFC应用,请参阅Finding Memory Leaks Using the CRT Library;对于MFC应用,请参阅Detecting memory leaks in MFC

答案 5 :(得分:0)

除了上述内容,我可以建议一些好的程序:^)例如?最好在Windows上使用deleaker。