2012-01-27 2 views
0

Я использовал valgrind раньше, и это было очень полезно. Недавно я установил среду dev и снова начал использовать valgrind. На этот раз он не найдет потерянной памяти! Даже если я malloc памяти и затем прервать программу с CTRL-C, я получаю дамп ниже. Может кто-нибудь объяснить, что происходит?valgrind не поймает очевидную утраченную память

Confused ....

==2489== HEAP SUMMARY: 
==2489==  in use at exit: 314,145 bytes in 585 blocks 
==2489== total heap usage: 1,410 allocs, 825 frees, 2,025,829 bytes allocated 
==2489== 
==2489== LEAK SUMMARY: 
==2489== definitely lost: 0 bytes in 0 blocks 
==2489== indirectly lost: 0 bytes in 0 blocks 
==2489==  possibly lost: 0 bytes in 0 blocks 
==2489== still reachable: 314,145 bytes in 585 blocks 
==2489==   suppressed: 0 bytes in 0 blocks 
==2489== Reachable blocks (those to which a pointer was found) are not shown. 
==2489== To see them, rerun with: --leak-check=full --show-reachable=yes 
==2489== 
==2489== For counts of detected and suppressed errors, rerun with: -v 
==2489== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 6 from 6) 
+1

памяти не теряется, если программа завершается, и у вас все еще есть указатель на нее. Он отображается под «все еще доступным», потому что он по-прежнему доступен в конце вашей программы. –

+1

ctrl + c отправляет SIGINT, который в основном прерывает вашу программу от продолжения выполнения. Вот почему вы получаете «все еще доступный», потому что вся эта память была выделена, но не освобождена. если вы используете флаги, то valgrind предлагает, в основном, '--show-достижимый = да', тогда он даст места где. – BlackJack

+0

@BlackJack: Пожалуйста, как это как ответ, и я подниму его, что объясняет это лучше, чем любой из уже присутствующих. –

ответ

4

Если есть еще указатель на эд памяти malloc, это не утечка. Он отображается как по-прежнему доступен в резюме.

Память, не free ред не обязательно просочилась, если это все-таки жить, то есть, есть еще указатель на него где-то (во всем мире, из стека, или из регистров.)