如何在Visual Studio C ++中检查内存是否已被释放?

时间:2009-02-23 20:18:19

标签: c++ visual-studio-2008 winapi memory-management

我想检查我的所有内存在C ++中的Visual Studio 2008中是否已被释放。我听说我可以添加一些包含,也许可以编写一些代码行,并且应该这样做。

有谁知道我怎么做?

提前致谢,

格雷格

5 个答案:

答案 0 :(得分:5)

这样的事情可能就是你想要的。

#define _CRTDBG_MAP_ALLOC
#include <stdio.h> 
#include <crtdbg.h>

int main()
{
    malloc(100);
    _CrtDumpMemoryLeaks();
    return 1;
}

答案 1 :(得分:1)

最古老的方法之一是覆盖new和delete运算符(假设所有堆分配都是通过new完成的)。 Prnt out放置在你过载的new和delete操作符中,让你可以帮助确保在退出之前有cleanedup。但这可能有点棘手;你会想要在全局范围内重载new和delete。但这可能会造成其他未解释的错误。(当然,你只会在调试模式下使用重载的运算符,好吧)保持它的类范围。

另一种聪明的方法是使用auto_ptr。要确保删除的指针存储在堆栈上的auto_ptr模板对象中。因此,当此对象超出范围时,它会将指针与其一起存储。

如果您仍然担心泄漏,请尝试使用windbg进行学习。它是一个很棒的工具,可以帮助您识别内存泄漏。我发现找出手柄引起的泄漏真的很有效。

答案 2 :(得分:0)

包括“crtdbg.h”

并使用

_CrtDumpMemoryLeaks()

您可以在crtdbg中查找其他可能有用的方法。

答案 3 :(得分:0)

我正在为VC ++ 2003寻找类似的工具,并通过软件验证(www.softwareverify.com)遇到了MemoryChecker。不是免费的,但价格非常合理(低于Purify和Bounds Checker)。我还在评估它,但我使用的部件看起来非常令人印象深刻。免费试用30天。

你可以跟踪内存错误(删除而不是删除[]等),泄露的内存,内存热点等...以前没有使用过这样的东西,我发现它很酷:)

答案 4 :(得分:0)

CodeProject上有一个很好的(免费)实用工具类可以帮助Memory Leak Detection。我发现在使用一些充满内存泄漏的遗留代码时非常有用。

为了避免使用auto_ptr和RAAI的新代码泄漏,通常是可行的方法。