Сбивающий с толку вывод Valgrind:косвенно потерянные блоки, но без ошибок?
-
13-09-2019 - |
Вопрос
Я запускаю valgrind 3.5.0, чтобы попытаться устранить утечки памяти в моей программе.Я ссылаюсь на это как на так:
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes
После завершения моей программы valgrind сообщает, что
==22926==
==22926== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 17 from 1)
==22926== malloc/free: in use at exit: 20,862 bytes in 425 blocks.
==22926== malloc/free: 25,361 allocs, 24,936 frees, 772,998 bytes allocated.
==22926== For counts of detected errors, rerun with: -v
==22926== searching for pointers to 425 not-freed blocks.
==22926== checked 91,884 bytes.
Несмотря на то, что мне сказали, что ошибок 0, я обеспокоен тем, что количество выделений и освобождений не совпадают.Еще больше Беспокойство по-прежнему вызывает следующее:
==22926== LEAK SUMMARY:
==22926== definitely lost: 68 bytes in 1 blocks.
==22926== indirectly lost: 20,794 bytes in 424 blocks.
==22926== possibly lost: 0 bytes in 0 blocks.
==22926== still reachable: 0 bytes in 0 blocks.
==22926== suppressed: 0 bytes in 0 blocks.
Существует дополнительная информация, относящаяся к тому, что представляется утечкой:
==22926== 20,862 (68 direct, 20,794 indirect) bytes in 1 blocks are definitely lost in loss record 9 of 17
==22926== at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==22926== by 0x807960B: OneTwoThree::OneTwoThree(Scenario const*) (onetwothree.cc:22)
==22926== by 0x804DD69: main (scsolver.cpp:654)
В рассматриваемой строке в конструкторе OneTwoThree у меня есть следующее:
OneTwoThree::OneTwoThree (const Scenario* scenario) :
Choice("123", scenario, new Solution (scenario->name(), scenario)),
seen_(new bool [sol_->numVisits()])
{
}
позже, в деструкторе, seen_ удаляется следующим образом:
OneTwoThree::~OneTwoThree ()
{
delete [] seen_;
}
Перераспределения памяти, связанной с увиденным, не происходит_;Я меняю bools на true / false только в процессе запуска моей программы.
Я не вижу здесь утечки, и я не понимаю, что valgrind пытается мне сказать.Я прочитал руководство по использованию valgrind (в частности, это) но Я не очень-то просвещен.
Кто-нибудь может помочь мне обработать этот результат?
Решение
Комментаторы к статье попали в точку;Объект Решения, создаваемый в конструкторе, никогда не удалялся.Я исправил вопиющую оплошность и избавился от уродливого кода, создающего новые объекты вне конструктора объекта, который за них отвечает.
Спасибо вам, Артелиус, Николай и Джонатан!