Custom Distributor: Valgrind shows 7 distributions, 0 frees, no leaks

I am working on a clone of malloc (3) functions ( malloc , realloc and free ).

I would like to add support for Valgrind. I use these documents . However, after adding calls to the VALGRIND_MEMPOOL_FREE , VALGRIND_MEMPOOL_ALLOC and VALGRIND_CREATE_MEMPOOL macros, I get the following from Valgrind:

 ==22303== HEAP SUMMARY: ==22303== in use at exit: 0 bytes in 0 blocks ==22303== total heap usage: 7 allocs, 0 frees, 2,039 bytes allocated ==22303== ==22303== All heap blocks were freed -- no leaks are possible 

This is despite my realloc call to VALGRIND_MEMPOOL_FREE and my free call to VALGRIND_MEMPOOL_FREE .

What could be the reason for this?

+6
source share
2 answers

What could be the reason for this?

This is due to an error in valgrind. See the link to the valgrind debugging tracker in my comment on your answer.

From another link in my comment:

A quick search in the source code shows that MEMPOOL_ALLOC calls new_block, which increases cmalloc_n_mallocs, but there is no corresponding change in cmalloc_n_frees to MEMPOOL_FREE.

 /* valgrind.c */ #include <valgrind/valgrind.h> int main(int argc, char *argv[]) { char pool[100]; VALGRIND_CREATE_MEMPOOL(pool, 0, 0); VALGRIND_MEMPOOL_ALLOC(pool, pool, 8); VALGRIND_MEMPOOL_FREE(pool, pool); VALGRIND_DESTROY_MEMPOOL(pool); return 0; } 

 $ gcc valgrind.c -g $ valgrind --leak-check=full --show-leak-kinds=all ./a.out ==10186== Memcheck, a memory error detector ==10186== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==10186== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info ==10186== Command: ./a.out ==10186== ==10186== ==10186== HEAP SUMMARY: ==10186== in use at exit: 0 bytes in 0 blocks ==10186== total heap usage: 1 allocs, 0 frees, 8 bytes allocated ==10186== ==10186== All heap blocks were freed -- no leaks are possible ==10186== ==10186== For counts of detected and suppressed errors, rerun with: -v ==10186== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) $ 
+5
source

Taken from here: http://valgrind.10908.n7.nabble.com/VALGRIND-MEMPOOL-FREE-not-reflected-in-heap-summary-td42789.html

A quick search in the source code shows that MEMPOOL_ALLOC calls new_block, which increases cmalloc_n_mallocs, but there is no corresponding change in cmalloc_n_frees to MEMPOOL_FREE. Here's a patch that increments it at the very end of MEMPOOL_FREE. It gives me the behavior that I expect.

0
source

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


All Articles