【发布时间】: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 Obj对rule-of-three 所做的一切都是正确的。 -
std::vector::erase()不承诺归还内存。破坏向量确实如此。
标签: c++ vector memory-leaks