Ну, я очень новичок в 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 выделяет, 11 освобождает Это нормально?
Поскольку я не использую новый, почему я должен удалить?
Спасибо, за любую помощь!