Valgrind does not throw errors, but not all heap allocations have been freed

This is what I get after running my program with 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)

There seems to be no leaks, as the last line of output says. However, we have this line too:

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

How do I have no errors, but still have a selection that has not been freed? Is something wrong with my program, or maybe Valgrind did something behind the scenes?

+4
source share
1 answer

The backlink provided by valgrind shows that the corresponding memory allocation was made in the initialization function of one of the shared libraries loaded by the application, apparently by the C ++ library itself.

, , - , .

.

valgrind , " ", .

.

+4

Source: https://habr.com/ru/post/1657117/


All Articles