好吧,总的来说,我对 Valgrind 和内存泄漏分析器非常陌生。而且我必须说,当您开始使用它们时会有些害怕,因为您无法停止想知道以前可能有多少泄漏未解决!
就这一点而言,由于我不是 C++ 程序员的经验丰富,我想检查这是否肯定是内存泄漏,或者 Valgrind 是否在做误报?
typedef std::vector<int> Vector;
typedef std::vector<Vector> VectorVector;
typedef std::map<std::string, Vector*> MapVector;
typedef std::pair<std::string, Vector*> PairVector;
typedef std::map<std::string, Vector*>::iterator IteratorVector;
VectorVector vv;
MapVector m1;
MapVector m2;
vv.push_back(Vector());
m1.insert(PairVector("one", &vv.back()));
vv.push_back(Vector());
m2.insert(PairVector("two", &vv.back()));
IteratorVector i = m1.find("one");
i->second->push_back(10);
m2.insert(PairVector("one", i->second));
m2.clear();
m1.clear();
vv.clear();
这是为什么?clear 命令不应该调用每个对象和每个向量的析构函数吗?
现在在做了一些测试后,我发现了不同的泄漏解决方案:
1) 删除:
i->second->push_back(10);
2)添加:
delete i->second;
3) 删除第二个
vv.push_back(Vector());
m2.insert(PairVector("two", &vv.back()));
使用解决方案 2) 使 Valgring 打印:10 allocs, 11 frees可以吗?
由于我没有使用 new 为什么要删除?
谢谢你的帮助!