【问题标题】:How to check that the memory has been freed in visual studio C++?如何检查 Visual Studio C++ 中的内存是否已释放?
【发布时间】:2010-10-09 09:54:38
【问题描述】:
我想检查我的所有内存在 C++ 中的 Visual Studio 2008 中是否已正常释放。我听说我可以添加一些包含,也许可以写一些代码行,应该这样做。
有人知道我该怎么做吗?
提前致谢,
格雷格
【问题讨论】:
标签:
c++
visual-studio-2008
winapi
memory-management
【解决方案1】:
您可能正在寻找类似的东西。
#define _CRTDBG_MAP_ALLOC
#include <stdio.h>
#include <crtdbg.h>
int main()
{
malloc(100);
_CrtDumpMemoryLeaks();
return 1;
}
【解决方案2】:
最古老的方法之一是覆盖 new 和 delete 运算符(假设所有堆分配都通过 new 完成)。打印输出策略性地放置在过载的新操作符和删除操作符中,让您帮助确保在退出之前进行清理。但这可能有点棘手。你会很想在全局范围内重载 new 和 delete 。但这可能会造成其他未解释的错误。(当然,您将在调试模式下仅使用重载运算符,好的)将其保留在您的类范围内。
另一个聪明的方法是使用 auto_ptr。您要确保删除的指针存储在堆栈上的 auto_ptr 模板对象中。因此,当此对象超出范围时,它会获取与其一起存储的指针。
如果您仍然担心泄漏,请尝试使用 windbg 进行学习。它是一个很棒的工具,可以帮助您识别内存泄漏。我发现找出由句柄引起的泄漏非常有效。
【解决方案3】:
包括“crtdbg.h”
并使用
_CrtDumpMemoryLeaks()
您可以在 crtdbg 中查找其他可能有用的方法。
【解决方案4】:
我正在为 VC++ 2003 寻找类似的工具,并通过软件验证 (www.softwareverify.com) 偶然发现了 MemoryChecker。不是免费的,但价格非常合理(低于 Purify and Bounds Checker)。我仍在评估它,但我使用的部件看起来非常令人印象深刻。 30 天免费试用。
您可以跟踪内存错误(删除而不是 delete[] 等)、内存泄漏、内存热点等...以前没有使用过类似的东西,我发现它非常酷:)