Всякий раз, когда вы не уверены утечки памяти в вашем коде, вы можете использовать valgrindvalgrind --tool=memcheck
, чтобы проверить их, но обязательно компилировать код без оптимизации и в полном режиме отладки (например, «г ++ -g»).
Вот выход для вашей программы:
=29667== Memcheck, a memory error detector
==29667== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==29667== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info
==29667== Command: ./main
==29667==
==29667== Invalid free()/delete/delete[]
==29667== at 0x4C26DCF: operator delete(void*) (vg_replace_malloc.c:387)
==29667== by 0x4006AB: main (main.cpp:7)
==29667== Address 0x7fefffd0c is on thread 1's stack
==29667==
==29667==
==29667== HEAP SUMMARY:
==29667== in use at exit: 4 bytes in 1 blocks
==29667== total heap usage: 1 allocs, 1 frees, 4 bytes allocated
==29667==
==29667== LEAK SUMMARY:
==29667== definitely lost: 4 bytes in 1 blocks
==29667== indirectly lost: 0 bytes in 0 blocks
==29667== possibly lost: 0 bytes in 0 blocks
==29667== still reachable: 0 bytes in 0 blocks
==29667== suppressed: 0 bytes in 0 blocks
==29667== Rerun with --leak-check=full to see details of leaked memory
==29667==
==29667== For counts of detected and suppressed errors, rerun with: -v
==29667== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 4 from 4)
Ваш код теряет 4 байта на выходе().
Вот список вещей вы можете сделать с MemCheck, от инструмента website
MemCheck является детектор ошибок памяти. Он может обнаруживать следующие проблемы , которые являются общими для программ на C и C++.
Доступ к памяти вы не должны, например. overrunning и блокируют блоки кучи, перекрывая верхнюю часть стека и получая доступ к памяти после того, как она была освобождена.
Использование неопределенных значений, то есть значений, которые не были инициализированы, или которые были получены из других неопределенных значений.
Неправильного освобождение динамической памяти, например, двойные освобождая блоки кучи, или несогласованного использования таНоса/новый/новый [] по сравнению с бесплатно/удалить/удалить []
Такие проблемы, как это может быть трудно найти с помощью других средств, часто оставаясь незамеченными в течение длительного периода времени, а затем в результате чего иногда, трудных для диагностики сбоев.
Я думаю, что он выходит из строя причиной пт не указывает на пространство памяти больше БРОНИРОВАТЬ – DGomez
Ваш код будет более вероятно, аварии ... – JosephH
@DGomez, Не надо. Это UB. – chris