首页 > 解决方案 > 声明字符串时内存泄漏

问题描述

我正在开发一个需要 0 个内存泄漏的 C++ 控制台应用程序。但是,我对内存泄漏非常陌生,我想知道为什么这已经导致内存泄漏,而几乎没有任何代码:

int main()
{
    std::string httpResult;


    _CrtDumpMemoryLeaks();


    return 0;
}

这是 VS 2019 中给定的内存泄漏:

Detected memory leaks!
Dumping objects ->
{93} normal block at 0x00000146FEB63BD0, 16 bytes long.
 Data: <x               > 78 FB 15 D6 13 00 00 00 00 00 00 00 00 00 00 00 
Object dump complete.

我唯一要做的就是声明一个 std::string。为什么这是内存泄漏?

标签: c++visual-studiomemory-leaks

解决方案


考虑一下:

int main()
{
    std::string httpResult;


    _CrtDumpMemoryLeaks();

    std::abort();

    return 0;
}

此代码存在内存泄漏,因为在调用abort具有自动存储持续时间的对象的析构函数时不会被调用。_CrtDumpMemoryLeaks();无法提前知道调用后资源是否会被清理。此代码中没有内存泄漏

int main()
{
 
    {
        std::string httpResult;
    }

    _CrtDumpMemoryLeaks();


    return 0;
}

(并且_CrtDumpMemoryLeaks();没有看到任何内存泄漏的候选者。)


推荐阅读