【问题标题】:memory leak from vector矢量内存泄漏
【发布时间】:2014-08-19 02:07:29
【问题描述】:

我看到我的矢量出现内存泄漏,我尝试删除内容然后清除矢量,同时擦除矢量。我的 Crtdb 仍在通知我内存泄漏,我知道它涉及向量,因为当我评论所有与向量相关的东西时,我没有泄漏。这是我所有的代码都在做的事情。

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <vector>
#include "MyClass.h"

int main(void){
    Obj *a = new Obj();
    std::vector<Obj> vec;
    vec.push_back(*a);

    Obj b = vec[0];

    vec.erase(vec.begin(),vec.end());
    delete a;
    _CrtDumpMemoryLeaks();
    return 0;
}

【问题讨论】:

  • 至少显示Obj的最小定义。
  • Obj 会是?泄漏的可能来源是Obj 的内存管理错误。
  • 当您调用泄漏检查器时,您的向量尚未超出范围。
  • 我很确定泄漏的是Obj,而不是std::vector,还要确保class Objrule-of-three 所做的一切都是正确的。
  • std::vector::erase() 不承诺归还内存。破坏向量确实如此。

标签: c++ vector memory-leaks


【解决方案1】:

当您调用泄漏检查器时,您的向量尚未超出范围。

【讨论】:

  • 而@Drew Dormann 在评论中说,std::vector::erase() 不承诺释放内存。你并不真的想要它,因为如果你在擦除()之后重用正常行为的向量,它必须分配更多的内存来替换它刚刚释放的内存。
猜你喜欢
  • 2020-04-12
  • 1970-01-01
  • 2013-09-02
  • 2015-03-07
  • 2013-03-11
  • 2019-04-11
  • 2022-12-13
  • 2013-03-01
  • 1970-01-01
相关资源
最近更新 更多