Why is Valgrind stating that my implementation of std::map produces a memory leak?

前端 未结 2 1578
既然无缘
既然无缘 2021-01-14 14:14

Valgrind is outputting the following:

==14446== 2,976 (176 direct, 2,800 indirect) bytes in 2 blocks are definitely lost in loss record 23 of 33
==14446==            


        
相关标签:
2条回答
  • 2021-01-14 14:50

    The error does not seem to come from your code, but a library you are using.

    Valgrind comes with some default error suppression, but that probably does not cover the library you are using.

    The error-checking tools detect numerous problems in the base libraries, such as the GNU C library, and the X11 client libraries, which come pre-installed on your GNU/Linux system. You can't easily fix these, but you don't want to see these errors (and yes, there are many!) So Valgrind reads a list of errors to suppress at startup. A default suppression file is created by the ./configure script when the system is built.

    You can create your own error suppressions that you know are irrelevant to your code.

    See the similar SO question Why does Valgrind not like my usage of glutCreateWindow?

    0 讨论(0)
  • 2021-01-14 14:58

    It's probably because of a pool allocator. From Valgrind FAQ:

    My program uses the C++ STL and string classes. Valgrind reports 'still reachable' memory leaks involving these classes at the exit of the program, but there should be none.

    First of all: relax, it's probably not a bug, but a feature. Many implementations of the C++ standard libraries use their own memory pool allocators. Memory for quite a number of destructed objects is not immediately freed and given back to the OS, but kept in the pool(s) for later re-use. The fact that the pools are not freed at the exit() of the program cause Valgrind to report this memory as still reachable. The behaviour not to free pools at the exit() could be called a bug of the library though.

    Read more at: Valgrind Faq

    I may be wrong, as I'm in a hurry and I can't analyse your code.

    0 讨论(0)
提交回复
热议问题