Valgrind обнаруживает несвободное использование памяти кучи для тривиального кода - PullRequest
0 голосов
/ 10 мая 2019

Мой valgrind говорит мне, что нашел несвободную память кучи для самого тривиального кода C ++.

Мой код выглядит следующим образом:

#include <iostream>
#include <string>
int main() {
std::cout << "Hello!!!!" << std::endl;
return 0;
}

И результат valgrindздесь:

==12455== HEAP SUMMARY:
==12455==     in use at exit: 72,704 bytes in 1 blocks
==12455==   total heap usage: 2 allocs, 1 frees, 73,728 bytes allocated
==12455== 
==12455== 72,704 bytes in 1 blocks are still reachable in loss record 1 of 1
==12455==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12455==    by 0x4EC3EFF: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21)
==12455==    by 0x40106C9: call_init.part.0 (dl-init.c:72)
==12455==    by 0x40107DA: call_init (dl-init.c:30)
==12455==    by 0x40107DA: _dl_init (dl-init.c:120)
==12455==    by 0x4000C69: ??? (in /lib/x86_64-linux-gnu/ld-2.23.so)
==12455== 
==12455== LEAK SUMMARY:
==12455==    definitely lost: 0 bytes in 0 blocks
==12455==    indirectly lost: 0 bytes in 0 blocks
==12455==      possibly lost: 0 bytes in 0 blocks
==12455==    still reachable: 72,704 bytes in 1 blocks
==12455==         suppressed: 0 bytes in 0 blocks
==12455== 
==12455== For counts of detected and suppressed errors, rerun with: -v
==12455== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Это ошибка Valgrind?

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Я использую valgrind 3.14.0 под Ubuntu 19.04, и я не получаю никаких обнаружений. Я бегал с --leak-check=full и без. Может быть, это всего лишь несколько версий valgrind.

0 голосов
/ 10 мая 2019

Это связано с тем, как работает стандартная библиотека C ++.Контейнеры распределяют порции памяти (называемые пулами) и управляют ими внутренне.В основном они используют собственный менеджер памяти, а не полагаются на системный менеджер памяти.Поэтому, когда объект уничтожается, его память освобождается внутренним распределителем для повторного использования, но не возвращается операционной системе.

Это также описано в FAQ Valgrind здесь .

Чтобы обобщить немного, valgrind - очень полезный инструмент, но вы должны стремиться не к 0 утечкам, а к тому, чтобы понять его отчеты и найти утечки, которые указывают на проблему в коде.

...