Valgrind не выдает ошибку, но не все выделения кучи были освобождены

Это то, что я получаю после выполнения моей программы с Valgrind:

1    jscherman@jscherman:~/ClionProjects/algo2-t4-tries$ g++ Set.hpp tests.cpp DiccString.hpp && valgrind --leak-check=yes --show-leak-kinds=all ./a.out
2    ==6823== Memcheck, a memory error detector
3    ==6823== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
4    ==6823== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
5    ==6823== Command: ./a.out
6    ==6823==
7    test_empty_dicc...ok
8    test_copy_constructor...ok
9    test_define_defined...ok
10    test_get..ok
11    test_remove...ok
12    test_remove_tiny...ok
13    test_keys...ok
14    ==6823==
15    ==6823== HEAP SUMMARY:
16    ==6823==     in use at exit: 72,704 bytes in 1 blocks
17    ==6823==   total heap usage: 282 allocs, 281 frees, 275,300 bytes allocated
18    ==6823==
19    ==6823== 72,704 bytes in 1 blocks are still reachable in loss record 1 of 1
20    ==6823==    at 0x4C2DC10: malloc (vg_replace_malloc.c:299)
21    ==6823==    by 0x4EC3EFF: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21)
22    ==6823==    by 0x40104E9: call_init.part.0 (dl-init.c:72)
23    ==6823==    by 0x40105FA: call_init (dl-init.c:30)
24    ==6823==    by 0x40105FA: _dl_init (dl-init.c:120)
25    ==6823==    by 0x4000CF9: ??? (in /lib/x86_64-linux-gnu/ld-2.23.so)
26    ==6823==
27    ==6823== LEAK SUMMARY:
28    ==6823==    definitely lost: 0 bytes in 0 blocks
29    ==6823==    indirectly lost: 0 bytes in 0 blocks
30    ==6823==      possibly lost: 0 bytes in 0 blocks
31    ==6823==    still reachable: 72,704 bytes in 1 blocks
32    ==6823==         suppressed: 0 bytes in 0 blocks
33    ==6823==
34    ==6823== For counts of detected and suppressed errors, rerun with: -v
35    ==6823== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Кажется, что нет утечек, как говорится в последней строке вывода. Тем не менее, у нас есть также эта строка:

17    ==6823==   total heap usage: 282 allocs, 281 frees, 275,300 bytes allocated

Как это, что у меня нет никаких ошибок, но все еще есть распределение, которое не было освобождено? Что-то не так с моей программой или, может быть, что-то делается Valgrind за кулисами?

4

Решение

Обратный след, о котором сообщает valgrind, показывает, что рассматриваемое выделение памяти было выполнено в функции инициализации одной из разделяемых библиотек, загружаемых приложением, по-видимому, самой библиотеки C ++.

Совместно используемые библиотеки довольно часто делают одноразовые выделения для различных битов и фрагментов данных, но не пытаются явно освобождать их, когда они выгружаются.

Это не означает утечку памяти в вашем собственном коде.

valgrind поставляется со списком известных распределений такого рода, он называется «список подавления», для явной цели подавления отчетов об этих известных одноразовых распределениях.

Но, иногда, эти списки подавления пропускают распределение, или два.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector