【问题标题】:map class causes memory leaksmap 类导致内存泄漏
【发布时间】:2014-11-17 19:27:13
【问题描述】:
 int main()
    {
    map<string,string> x;
    x["Haitham"]="000@hotmail.com";
    x.clear();

    _CrtDumpMemoryLeaks();
    return 0;
    }

当我测试此程序的内存泄漏时,检测到输出 内存泄漏!

{152} 0x0070ABD8 处的普通块,8 字节长。

数据: 34 AB 70 00 00 00 00 00

{151} 0x0070AB90 处的普通块,8 字节长。

{150} 0x0070AB08 处的普通块,72 字节长。

数据:p p ` p > 60 A9 70 00 60 A9 70 00 60 A9 70 00 01 00 CD 光盘

{145} 0x00704C40 处的普通块,8 字节长。

数据: E4 FE 5E 00 00 00 00 00

{144} 0x0070A960 处的普通块,72 字节长。

数据: 08 AB 70 00 08 AB 70 00 08 AB 70 00 01 01 CD 光盘

数据:

18 AB 70 00 00 00 00 00

对象转储完成。

【问题讨论】:

  • 尝试在引用 map 的 3 行周围添加一组额外的大括号(或将它们移至另一个函数)。
  • 请陈述一个明确的问题,而不仅仅是一些代码和标题
  • 在您调用转储函数时,x 仍然存在。所以当然内部map 分配将被视为泄露...

标签: c++ maps


【解决方案1】:

这个问题是你调用检查内存泄漏的函数太快了。在您调用_CrtDumpMemoryLeaks 时,map 尚未被销毁。

将您的代码更改为:

int main()
{
    {
        map<string,string> x;
        x["Haitham"]="000@hotmail.com";
        x.clear();
    }
    _CrtDumpMemoryLeaks();
    return 0;
}

现在应该表明 map 已被破坏,因为它是 { } 块的本地对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-06
    • 2014-06-07
    • 2013-11-20
    • 2011-10-28
    • 2016-01-18
    • 2012-12-13
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多