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

C++ memory leak auto detection library

本文关键字:自动检测 泄漏 内存 c++      更新时间:2023-10-16

我正在寻找内存泄漏检测库。比如我把它包含到源代码中然后它就会开始检测。外部程序可能是好的,但我正在寻找一些库,可以链接到可执行文件。
我正在搜索Windows。

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

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

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

所以无论你在哪里使用new,它也可以跟踪文件和行号,可以用来定位内存泄漏在你的程序。

__FILE__, __LINE__是预定义的宏,分别计算文件名和行号,您在哪里使用它们!

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

跨平台内存泄漏检测器


从Wikpedia

Debug_new指的是c++中的一种技术重载和/或重新定义操作符New和operator delete的顺序拦截内存分配和解分配调用,从而调试内存使用程序。它经常涉及定义一个名为DEBUG_NEW,并使new成为类似的新文件(_ _, _ _行)记录文件/行信息分配。 Microsoft Visual c++使用微软的这种技术基础类。有一些方法扩展此方法以避免静止时使用宏重定义能够显示文件/行一些平台上的信息。在那里这有很多固有的限制吗方法。它只适用于c++,和无法捕获C语言的内存泄漏像malloc这样的函数。然而,它可以使用起来非常简单,也非常快,当与其他一些完整的内存调试解决方案。

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

对我来说,这是很长一段时间以来最好的工具:http://www.paulnettle.com/pub/FluidStudios/MemoryManagers/Fluid_Studios_Memory_Manager.zip只包含一个头文件,你就完成了:)

Visual studio在Windows上有这样的功能。参见http://msdn.microsoft.com/en-us/library/e5ewb1h3(v=VS.90).aspx。在linux下,我不知道是否存在这样的事情,但是valgrind确实可以很好地找到各种内存问题(不仅泄漏,而且无效读取)。

除了上面的,我可以建议一些好的程序:^)作为例子?

如果你正在使用vc++,这个功能是内置的。请参见使用CRT库查找非MFC应用程序的内存泄漏和检测MFC应用程序的MFC内存泄漏。