【发布时间】:2011-04-03 16:10:42
【问题描述】:
我正在寻找内存泄漏检测库。
像我将它包含到源代码中然后它应该开始检测的东西。外部程序可能很好,但我正在寻找一些可以链接到可执行文件的库。
这我正在寻找 Windows。
【问题讨论】:
我正在寻找内存泄漏检测库。
像我将它包含到源代码中然后它应该开始检测的东西。外部程序可能很好,但我正在寻找一些可以链接到可执行文件的库。
这我正在寻找 Windows。
【问题讨论】:
您可以在代码中使用一些技术来检测内存泄漏。最常见和最简单的检测方法是,定义一个宏,比如 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,并使新成为 类似新的(_FILE_, _LINE_) 记录文件/行信息 分配。 Microsoft Visual C++ 使用 这种技术在其微软 基础班。有一些 扩展此方法的方法以避免 仍然使用宏重新定义 能够显示文件/行 一些平台上的信息。那里 对此有许多固有的限制 方法。它仅适用于 C++,并且 无法捕获 C 的内存泄漏 malloc 之类的函数。然而,它可以 使用起来非常简单,也非常 快,与其他一些相比 完整的内存调试器解决方案。
【讨论】:
DEBUG_NEW。
我可以推荐Visual Leak Detector,它比Visual Studio 内置的更容易使用。
【讨论】:
对我来说,很长一段时间以来,这是最好的工具: http://www.paulnettle.com/pub/FluidStudios/MemoryManagers/Fluid_Studios_Memory_Manager.zip 只需包含 1 个头文件,您就完成了 :)
【讨论】:
Visual Studio 在 Windows 上有这样的功能。见http://msdn.microsoft.com/en-us/library/e5ewb1h3(v=VS.90).aspx。 linux下不知道有没有这样的东西,但是valgrind确实能很好的发现各种内存问题(不仅是泄漏,还有比如无效读取)。
【讨论】:
除了上面的,我可以推荐几个好的程序:^) 举个例子?最好在 Windows 上使用 deleaker。
【讨论】:
如果您使用的是 VC++,则该功能是内置的。对于非 MFC 应用,请参阅 Finding Memory Leaks Using the CRT Library,对于 MFC 应用,请参阅 Detecting memory leaks in MFC。
【讨论】: