我想检查我的所有内存在C ++中的Visual Studio 2008中是否已被释放。我听说我可以添加一些包含,也许可以编写一些代码行,并且应该这样做。
有谁知道我怎么做?
提前致谢,
格雷格
答案 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的新代码泄漏,通常是可行的方法。