【问题标题】: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[] 等)、内存泄漏、内存热点等...以前没有使用过类似的东西,我发现它非常酷:)

        【讨论】:

          【解决方案5】:

          CodeProject 上有一个不错的(免费)实用程序类,可以帮助Memory Leak Detection。我发现它在处理一些充满内存泄漏的遗留代码时非常有用。

          使用 auto_ptr 和 RAAI 避免新代码泄漏通常是要走的路。

          【讨论】:

            猜你喜欢
            • 2012-01-08
            • 1970-01-01
            • 2010-12-12
            • 2017-02-16
            • 2022-08-16
            • 2023-03-11
            • 2011-07-12
            • 1970-01-01
            • 2011-05-07
            相关资源
            最近更新 更多