2011-04-03 112 views
6

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

回答

4

您可以在代码中使用一些技术来检测内存泄漏。检测最常见也是最容易的方法是,定义一个宏DEBUG_NEW并将其与预定义的宏一起使用,例如__FILE____LINE__以查找代码中的内存泄漏。这些预定义的宏会告诉你内存泄漏的文件和行号。

DEBUG_NEW仅仅是通常被定义为一个宏:

#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++ 过载和/或重新定义运算符 新的和运算符删除的顺序到 拦截内存分配和 解除分配调用,从而调试内存使用的 程序。 经常 涉及定义一个名为 DEBUG_NEW宏,使新成为 像新(_ FILE _,_ LINE _) 记录上 配置文件/行信息。 Microsoft Visual C++在其Microsoft“ 基础类中使用 此技术。有一些 方法来扩展此方法,以避免 使用宏重定义,而仍然 能够显示某些平台上的文件/行 信息。这种 方法有许多固有的限制。它仅适用于C++,并且 无法捕获像malloc这样的函数的内存泄漏。但是,它可以使用起来非常简单,并且与更多的 完整的内存调试器解决方案相比,速度更快。

+1

+1 from me。这是我最喜欢的检测泄漏方法之一,但保留一个分配的地址列表并检查它们是否与每次删除时发送删除的地址一致,这是性能激励(O(n)= nlog(n))。 ,只能在调试版本中使用该技术,而不能在发布版本中使用。 – 2011-04-04 05:52:40

+0

@Als:我认为很明显,这种技术应该只用于调试版本,因为我选择的宏名称(或通常选择的)是'DEBUG_NEW'。 – Nawaz 2011-04-04 05:54:58

+0

只是明确提到相同。反正你有我的+1 :)我看不到任何麒麟,就像其他日子一样.... – 2011-04-04 05:57:55

0

除了以上,我可以告诉几个好程序:^)例如?对于Windows使用deleaker会很好。