我正在使用许多 glib 数据结构(GHashTable、GSList 等)开发一个库。我一直在使用 valgrind 经常检查我的代码是否存在内存泄漏。valgrind 指出的大多数问题都很容易解决,但是有一些我无法弄清楚。
所有这些都被报告为“可能丢失”。
在 valgrind 堆栈跟踪的顶部,我总是找到相同的 4 个库:
==29997== 1,512 bytes in 3 blocks are possibly lost in loss record 24 of 25
==29997== at 0x4004B11: memalign (vg_replace_malloc.c:532)
==29997== by 0x4004B6B: posix_memalign (vg_replace_malloc.c:660)
==29997== by 0x5E9AC4: ??? (in /lib/libglib-2.0.so.0.1200.3)
==29997== by 0x5EA4FE: g_slice_alloc (in /lib/libglib-2.0.so.0.1200.3)
在调用堆栈的更下方,总是会调用 glib 函数,例如 g_key_file_new()、g_slist_prepend()、g_strsplit()、g_key_file_load_from_file()、g_file_get_contents()。
我的问题是:
有没有人遇到过这个并找到解决方法?
或者这是我可以忽略的东西?是因为 glib 使用了内存池,正如这里所建议的那样吗?
我在用
- valgrind-3.5.0
- glib-2.12.3
- gcc (GCC) 4.1.2 20080704 (红帽 4.1.2-48)
- CentOS 5.5 版(最终版)