требуется помощь valgrind - PullRequest
       1

требуется помощь valgrind

0 голосов
/ 11 ноября 2010

Мое приложение вызывает утечку памяти на 10 м по одному сценарию.Но когда я отлаживал с помощью valgrind, ниже приводится краткое описание утечки.

812 ==18074== LEAK SUMMARY:    
813 ==18074==    definitely lost: 0 bytes in 0 blocks.    
814 ==18074==      possibly lost: 3,424 bytes in 20 blocks.   
815 ==18074==    still reachable: 10,422 bytes in 47 blocks.   
816 ==18074==         suppressed: 0 bytes in 0 blocks.

Что я могу извлечь из этого резюме?Могу ли я сказать, что нет проблем с приложением?

Может кто-нибудь также объяснить следующее?в чем может быть проблема при создании темы?Я даже не передаю что-то динамически выделенное в качестве аргумента потока.

795 ==18074== 2,448 bytes in 17 blocks are possibly lost in loss record 32 of 33  
796 ==18074==    at 0x40056BF: calloc (vg_replace_malloc.c:279)  
797 ==18074==    by 0xC0D71A: _dl_allocate_tls (in /lib/ld-2.3.4.so)  
798 ==18074==    by 0xD8A91E: pthread_create@@GLIBC_2.1 (in /lib/tls/libpthread-2.3.4.so)  
799 ==18074==    by 0x8056A28: Server::intithreads() (ServerProcess.cpp:899)  
800 ==18074==    by 0x8054E39: main (ServerProcess.h:85)  

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Я бы не стал сильно беспокоиться о «все еще доступных» блоках. Поскольку все блоки освобождаются при выходе из программы, нет необходимости специально освобождать каждый блок. Чтобы улучшить ситуацию, вы можете попробовать освободить блоки на промежуточных этапах в вашей программе, после которых они вам не нужны. С другой стороны, «возможно потерянные» блоки имеют чуть более серьезный характер.

В любом случае, из руководства Valgrind :

«Все еще достижимо» . Это охватывает случаи для блоков BBB, показанных ниже. стартовый указатель или цепочка стартовые указатели на блок найдены. Так как на блок все еще указывают, программист мог, по крайней мере, в принцип, освободил его раньше программа выхода. Потому что это очень общие и, возможно, не проблема, Memcheck не будет сообщать о таких блоках индивидуально, если --show-достижимо = да указано.

Pointer chain            
-------------            
RRR ------------> BBB    
RRR ---> AAA ---> BBB

«Возможно, потерян» . Это охватывает случаи для блоки BBB показаны ниже. Это означает что цепочка из одного или нескольких указателей чтобы блок был найден, но при по крайней мере, один из указателей является интерьер-указатель. Это может быть просто случайное значение в памяти, которое происходит с указать на блок, и поэтому вы не следует считать это нормально, если вы знаю, что у вас есть внутренние указатели.

Pointer chain            
-------------            
RRR ------?-----> BBB    
RRR ---> AAA -?-> BBB    
RRR -?-> AAA ---> BBB    
RRR -?-> AAA -?-> BBB 
0 голосов
/ 11 ноября 2010

Возможны проблемы с вашим приложением в соответствии с отчетом об утечке памяти. Если значение «определенно потеряно», «возможно, потеряно» или «все еще достижимо» больше 0, значит, у вас утечка памяти.

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

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

«Все еще достижимо» означает, что была не освобожденная память, но на нее непосредственно указывали переменные при завершении программы. Это означает, что, хотя есть утечка, она не может расти, и это не так серьезно.

...