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

6

我正在寻找一个内存泄漏检测库。类似于我只需要将其包含在源代码中,然后它就应该开始检测。外部程序可能很好,但我正在寻找一些可以链接到可执行文件中的库。
我正在寻找适用于Windows的库。

6个回答

5
你可以在代码中使用一些技巧来检测内存泄漏。最常见和最简单的检测方法是定义一个宏,比如DEBUG_NEW,并与预定义的宏(如__FILE__和__LINE__)一起使用,以定位代码中的内存泄漏。这些预定义的宏告诉你内存泄漏的文件和行号。
DEBUG_NEW只是一个宏,通常定义为:
#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW

所以无论您在哪里使用new,它都可以跟踪文件和行号,这可以用于定位程序中的内存泄漏。
__FILE____LINE__预定义宏,分别评估使用它们的文件名和行号!
阅读以下文章,其中美妙地解释了使用DEBUG_NEW与其他有趣宏的技巧: 跨平台内存泄漏检测器

来自维基百科

Debug_new指的是C++中一种技术,通过重载和/或重新定义operator new和operator delete,以拦截内存分配和释放调用,从而调试程序的内存使用情况。通常涉及定义一个名为DEBUG_NEW的宏,并使new变成类似于new(_FILE_, _LINE_)的形式,以记录分配时的文件/行信息。Microsoft Visual C++在其Microsoft Foundation Classes中使用了这种技术。有一些方法可以扩展此方法,以避免使用宏重新定义,同时仍能在某些平台上显示文件/行信息。但是,这种方法存在许多固有限制。它只适用于C++,无法捕获由C函数(如malloc)引起的内存泄漏。然而,与一些更完整的内存调试器解决方案相比,它非常简单易用且速度很快。


1
这是我最喜欢的检测内存泄漏的方法之一,但需要维护一个已分配地址列表,并在每次删除时将其与要删除的地址进行比较,这会影响性能(O(n)=nlog(n))。重要的是要在此提到,仅在调试版本中使用该技术,而不是在发布版本中使用。+1。 - Alok Save
@Als:我认为这个技术只应该在调试版本中使用是显而易见的,因为我选择的宏名称(或通常选择的名称)是DEBUG_NEW - Nawaz
只是明确提到同样的事情。无论如何,你有我的+1 :) 尽管我今天没有看到任何独角兽.... - Alok Save

4

2

2

0

0
除了上述内容,我可以建议一些好的程序:^) 例如?在Windows上使用Deleaker会很不错。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接