【发布时间】:2010-02-21 16:41:13
【问题描述】:
我已经知道我可以在 Linux 上使用 mtrace 和 valgrind 跟踪我的代码中的内存泄漏,这两种方法都不适用于 Windows。您会推荐哪个 Windows 程序来跟踪内存泄漏?
我是 Eclipse 用户,我已经使用 C 语言一两个月了,因此我更喜欢用户友好的解决方案,而不是更高级的解决方案。
【问题讨论】:
标签: c windows memory-leaks
我已经知道我可以在 Linux 上使用 mtrace 和 valgrind 跟踪我的代码中的内存泄漏,这两种方法都不适用于 Windows。您会推荐哪个 Windows 程序来跟踪内存泄漏?
我是 Eclipse 用户,我已经使用 C 语言一两个月了,因此我更喜欢用户友好的解决方案,而不是更高级的解决方案。
【问题讨论】:
标签: c windows memory-leaks
应用程序验证器会很好地做到这一点,http://msdn.microsoft.com/en-us/library/ms220948.aspx
【讨论】:
您可以使用_CrtDumpMemoryLeaks。我想它类似于 mtrace。
【讨论】:
见Purify,可能还有Insecure++
【讨论】:
您可以连接,例如此处描述的视觉检漏仪: http://www.codeproject.com/KB/applications/visualleakdetector.aspx
另一种方法是计算特定操作之前和之后使用的内存量。就像这里描述的:msdn.microsoft.com/en-us/library/aa293901%28VS.60%29.aspx 像这样的东西可以很容易地添加到例如自动单元测试。
【讨论】:
这是一种常识性的方法,在 C 的行中,对于每一对 malloc,都有一个 free,如果没有泄漏,同样对于 GlobalAlloc , VirtualAlloc, HeapAlloc, LocalAlloc, VirtualAllocEx...有一个关联的...Free 对,例如在变量'foo'上运行HeapAlloc,并且没有@987654330 @ for 'foo',这是一个泄漏...
希望这会有所帮助, 此致, 汤姆。
【讨论】:
malloc 和free 调用的数量更复杂,因为我在循环中执行这些调用。
malloc 和 free 创建包装器来计算分配和释放。这种方法将简化跟踪它们并绕过循环情况。