Even after g_free()
the pointer to g_uuid_create_random()
variable, valgrind shows memory reachable.
#include <glib.h>
#include <glib/gi18n.h>
gint main(gint argc, gchar *argv[]) {
gchar id[37];
gchar *rnduuid = g_uuid_string_random();
g_strlcpy(id, rnduuid, 37);
g_free(rnduuid);
g_print("%s\n", id);
return EXIT_SUCCESS;
}
The valgrind output shows:
$ valgrind -s --leak-check=full --show-leak-kinds=all ./uuid_lost
==115757== Memcheck, a memory error detector
==115757== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==115757== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==115757== Command: ./uuid_lost
==115757==
6d0aeae3-ad06-4370-9f22-037f11d3c45a
==115757==
==115757== HEAP SUMMARY:
==115757== in use at exit: 21,170 bytes in 11 blocks
==115757== total heap usage: 25 allocs, 14 frees, 56,539 bytes allocated
==115757==
==115757== 4 bytes in 1 blocks are still reachable in loss record 1 of 11
==115757== at 0x483677F: malloc (vg_replace_malloc.c:309)
==115757== by 0x490AD03: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x490B2FB: g_private_get (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48DD1CC: g_slice_alloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48ACC9D: g_hash_table_new_full (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48CF88A: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x400F369: call_init.part.0 (dl-init.c:72)
==115757== by 0x400F468: call_init (dl-init.c:30)
==115757== by 0x400F468: _dl_init (dl-init.c:119)
==115757== by 0x40010C9: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.30.so)
==115757==
==115757== 4 bytes in 1 blocks are still reachable in loss record 2 of 11
==115757== at 0x483677F: malloc (vg_replace_malloc.c:309)
==115757== by 0x490AD03: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x490B2FB: g_private_get (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x4897E18: g_get_charset (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48C8439: g_print (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x1091E6: main (uuid_lost.c:12)
==115757==
==115757== 15 bytes in 1 blocks are still reachable in loss record 3 of 11
==115757== at 0x483677F: malloc (vg_replace_malloc.c:309)
==115757== by 0x48C51C8: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48DEE3F: g_strdup (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x4897E98: g_get_charset (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48C8439: g_print (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x1091E6: main (uuid_lost.c:12)
==115757==
==115757== 15 bytes in 1 blocks are still reachable in loss record 4 of 11
==115757== at 0x483677F: malloc (vg_replace_malloc.c:309)
==115757== by 0x48C51C8: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48DEE3F: g_strdup (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x4897F05: g_get_charset (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48C8439: g_print (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x1091E6: main (uuid_lost.c:12)
==115757==
==115757== 24 bytes in 1 blocks are still reachable in loss record 5 of 11
==115757== at 0x4838B65: calloc (vg_replace_malloc.c:762)
==115757== by 0x48C5220: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48E85A1: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x4897F30: g_get_charset (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48C8439: g_print (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x1091E6: main (uuid_lost.c:12)
==115757==
==115757== 32 bytes in 1 blocks are still reachable in loss record 6 of 11
==115757== at 0x4838B65: calloc (vg_replace_malloc.c:762)
==115757== by 0x48C5220: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48ABAAF: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48ACCDC: g_hash_table_new_full (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48CF88A: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x400F369: call_init.part.0 (dl-init.c:72)
==115757== by 0x400F468: call_init (dl-init.c:30)
==115757== by 0x400F468: _dl_init (dl-init.c:119)
==115757== by 0x40010C9: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.30.so)
==115757==
==115757== 64 bytes in 1 blocks are still reachable in loss record 7 of 11
==115757== at 0x48366AF: malloc (vg_replace_malloc.c:308)
==115757== by 0x4838DE7: realloc (vg_replace_malloc.c:836)
==115757== by 0x48C5267: g_realloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48ABA9A: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48ACCDC: g_hash_table_new_full (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48CF88A: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x400F369: call_init.part.0 (dl-init.c:72)
==115757== by 0x400F468: call_init (dl-init.c:30)
==115757== by 0x400F468: _dl_init (dl-init.c:119)
==115757== by 0x40010C9: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.30.so)
==115757==
==115757== 96 bytes in 1 blocks are still reachable in loss record 8 of 11
==115757== at 0x483677F: malloc (vg_replace_malloc.c:309)
==115757== by 0x48C51C8: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48DD1F1: g_slice_alloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48ACC9D: g_hash_table_new_full (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48CF88A: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x400F369: call_init.part.0 (dl-init.c:72)
==115757== by 0x400F468: call_init (dl-init.c:30)
==115757== by 0x400F468: _dl_init (dl-init.c:119)
==115757== by 0x40010C9: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.30.so)
==115757==
==115757== 2,032 bytes in 1 blocks are still reachable in loss record 9 of 11
==115757== at 0x4838B65: calloc (vg_replace_malloc.c:762)
==115757== by 0x48C5220: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48E85A1: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48DD442: g_slice_alloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48ACC9D: g_hash_table_new_full (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48CF88A: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x400F369: call_init.part.0 (dl-init.c:72)
==115757== by 0x400F468: call_init (dl-init.c:30)
==115757== by 0x400F468: _dl_init (dl-init.c:119)
==115757== by 0x40010C9: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.30.so)
==115757==
==115757== 2,500 bytes in 1 blocks are still reachable in loss record 10 of 11
==115757== at 0x4838B65: calloc (vg_replace_malloc.c:762)
==115757== by 0x48C5220: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48D1324: g_rand_new_with_seed_array (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48D13F1: g_rand_new (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48D181C: g_random_int (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48F6D18: g_uuid_string_random (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x1091A6: main (uuid_lost.c:9)
==115757==
==115757== 16,384 bytes in 1 blocks are still reachable in loss record 11 of 11
==115757== at 0x483677F: malloc (vg_replace_malloc.c:309)
==115757== by 0x48C51C8: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x48CF89B: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.3)
==115757== by 0x400F369: call_init.part.0 (dl-init.c:72)
==115757== by 0x400F468: call_init (dl-init.c:30)
==115757== by 0x400F468: _dl_init (dl-init.c:119)
==115757== by 0x40010C9: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.30.so)
==115757==
==115757== LEAK SUMMARY:
==115757== definitely lost: 0 bytes in 0 blocks
==115757== indirectly lost: 0 bytes in 0 blocks
==115757== possibly lost: 0 bytes in 0 blocks
==115757== still reachable: 21,170 bytes in 11 blocks
==115757== suppressed: 0 bytes in 0 blocks
==115757==
==115757== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Is safe to ignore this? Is it a bug? Am I doing something wrong?