Декодиране на изход от valgrind

Опитвам се да разбера изхода от valgrind, след като го изпълних, както следва: valgrind --leak-check=yes "someprogram"

Резултатът е тук:

==30347== 
==30347== HEAP SUMMARY:
==30347==     in use at exit: 126,188 bytes in 2,777 blocks
==30347==   total heap usage: 4,562 allocs, 1,785 frees, 974,922 bytes       
        allocated
==30347== 
==30347== LEAK SUMMARY:
==30347==    definitely lost: 0 bytes in 0 blocks
==30347==    indirectly lost: 0 bytes in 0 blocks
==30347==      possibly lost: 0 bytes in 0 blocks
==30347==    still reachable: 126,188 bytes in 2,777 blocks
==30347==         suppressed: 0 bytes in 0 blocks
==30347== Reachable blocks (those to which a pointer was found) are   
          not shown.
==30347== To see them, rerun with: --leak-check=full --show-reachable=yes
==30347== 
==30347== For counts of detected and suppressed errors, rerun with: -v
==30347== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

Според изхода няма загубени байтове, но изглежда има все още достъпни блокове. Така че имам ли изтичане на памет?

Благодаря предварително за всяка помощ.


person Smithy    schedule 06.07.2015    source източник


Отговори (1)


No.

Вие сте най-загрижени за недостижими блокове. Това, което виждате тук е, че има активни променливи, които все още "сочат" към достъпни блокове от паметта. Те все още са в обхвата.

Недостъпен блок би бил например памет, която сте заделили динамично, използвана за определен период от време и след това всички препратки към нея са излезли извън обхвата, въпреки че програмата все още се изпълнява. Тъй като вече нямате манипулатори, сочещи към тях, те вече са невъзстановими, създавайки изтичане на памет.

Ето цитат от документите на Valgrind:

"все още достъпен" означава, че вашата програма вероятно е наред -- не е освободила малко памет, която може да има. Това е доста често срещано и често основателно. Не използвайте --show-reachable=yes, ако не искате да виждате тези отчети.

person David Hoelzer    schedule 06.07.2015
comment
Благодаря ви Дейвид за бързия отговор. - person Smithy; 06.07.2015
comment
„Добавяне на коментар“ не ми позволява да въведа друг пример, защото е твърде дълъг. Как да вмъкна друг пример? - person Smithy; 06.07.2015