【问题标题】:Finding memory leaks in C code on Windows在 Windows 上查找 C 代码中的内存泄漏
【发布时间】:2010-02-21 16:41:13
【问题描述】:

我已经知道我可以在 Linux 上使用 mtracevalgrind 跟踪我的代码中的内存泄漏,这两种方法都不适用于 Windows。您会推荐哪个 Windows 程序来跟踪内存泄漏?

我是 Eclipse 用户,我已经使用 C 语言一两个月了,因此我更喜欢用户友好的解决方案,而不是更高级的解决方案。

【问题讨论】:

    标签: c windows memory-leaks


    【解决方案1】:

    应用程序验证器会很好地做到这一点,http://msdn.microsoft.com/en-us/library/ms220948.aspx

    【讨论】:

    • 我对 Application Verifier 感到很困惑,因为我对 C 的了解有限。mtrace 可以说我做了 x 数量的 malloc 和 x 数量的 free,但 Application Verifier 似乎也做了一些事情高级让我理解。
    • AppVerifier 尝试模拟您的应用程序在最坏情况下运行,然后在出现任何问题时中断调试器。它确实捕获的一件事是泄漏,它会自动记录谁进行了分配
    • 基本上,您所做的只是从 UI 中,将您的 EXE 添加到列表中,并标记您希望它运行的测试。从那时起,AppVerifier 将始终应用于您的 EXE,直到您禁用它
    【解决方案2】:

    您可以使用_CrtDumpMemoryLeaks。我想它类似于 mtrace。

    更多信息:http://www.codeguru.com/forum/showthread.php?t=312742

    【讨论】:

      【解决方案3】:

      Purify,可能还有Insecure++

      【讨论】:

        【解决方案4】:

        您可以连接,例如此处描述的视觉检漏仪: http://www.codeproject.com/KB/applications/visualleakdetector.aspx

        另一种方法是计算特定操作之前和之后使用的内存量。就像这里描述的:msdn.microsoft.com/en-us/library/aa293901%28VS.60%29.aspx 像这样的东西可以很容易地添加到例如自动单元测试。

        【讨论】:

          【解决方案5】:

          这是一种常识性的方法,在 C 的行中,对于每一对 malloc,都有一个 free,如果没有泄漏,同样对于 GlobalAlloc , VirtualAlloc, HeapAlloc, LocalAlloc, VirtualAllocEx...有一个关联的...Free 对,例如在变量'foo'上运行HeapAlloc,并且没有@987654330 @ for 'foo',这是一个泄漏...

          希望这会有所帮助, 此致, 汤姆。

          【讨论】:

          • 这比在我的代码中计算mallocfree 调用的数量更复杂,因为我在循环中执行这些调用。
          • 如果您喜欢手动执行操作,您可以为 mallocfree 创建包装器来计算分配和释放。这种方法将简化跟踪它们并绕过循环情况。
          猜你喜欢
          • 2013-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-26
          • 1970-01-01
          • 2023-03-24
          • 2016-12-10
          相关资源
          最近更新 更多