【问题标题】:C++ memory leak auto detection library [closed]C ++内存泄漏自动检测库[关闭]
【发布时间】:2011-04-03 16:10:42
【问题描述】:

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

【问题讨论】:

    标签: c++ memory


    【解决方案1】:

    您可以在代码中使用一些技术来检测内存泄漏。最常见和最简单的检测方法是,定义一个宏,比如 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 之类的函数。然而,它可以 使用起来非常简单,也非常 快,与其他一些相比 完整的内存调试器解决方案。

    【讨论】:

    • +1 来自我。这是我最喜欢的检测泄漏的方法之一,但维护分配的地址列表并检查它们是否与每次删除时发送删除的地址是性能激励(O(n)= nlog(n))。重要的是在这里提到, 仅在调试版本而不是发布版本中使用该技术。
    • @Als:我认为很明显这种技术应该只用于调试构建,因为我选择(或通常选择)的宏名称是DEBUG_NEW
    • 只是明确提及。无论如何,你有我的 +1 :) 不过我看不到任何独角兽,就像前几天一样....
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        Visual Studio 在 Windows 上有这样的功能。见http://msdn.microsoft.com/en-us/library/e5ewb1h3(v=VS.90).aspx。 linux下不知道有没有这样的东西,但是valgrind确实能很好的发现各种内存问题(不仅是泄漏,还有比如无效读取)。

        【讨论】:

          【解决方案5】:

          除了上面的,我可以推荐几个好的程序:^) 举个例子?最好在 Windows 上使用 deleaker。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-09-21
              • 2016-05-14
              • 2011-06-28
              • 2021-09-01
              • 2011-02-18
              • 2012-07-16
              • 2011-10-08
              相关资源
              最近更新 更多