简体   繁体   English

C:glib.h`pkg-config --cflags --libs glib-2.0` valgrind仍然可以访问

[英]C: glib.h `pkg-config --cflags --libs glib-2.0` valgrind still reachable

main.c as only ... main.c仅作为...

int main(void) 
{
    return 0;
}

Executing ... 执行中...

gcc `pkg-config --cflags --libs glib-2.0` -W -Wall -Wextra main.c -o out

Compiles into an executable ... 编译成可执行文件...

out

Executing ... 执行中...

valgrind --show-leak-kinds=all --leak-check=full -v ./out

Gives me ... 给我 ...

==6404== Memcheck, a memory error detector
==6404== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==6404== Using Valgrind-3.14.0-3a3000290b-20181009X and LibVEX; rerun with -h for copyright info
==6404== Command: ./out
==6404== 
--6404-- Valgrind options:
--6404--    --show-leak-kinds=all
--6404--    --leak-check=full
--6404--    -v
--6404-- Contents of /proc/version:
--6404--   Linux version 4.19.28-1-MANJARO (builduser@development) (gcc version 8.2.1 20181127 (GCC)) #1 SMP PREEMPT Sun Mar 10 08:32:42 UTC 2019
--6404-- 
--6404-- Arch and hwcaps: AMD64, LittleEndian, amd64-cx16-lzcnt-rdtscp-sse3-avx-avx2-bmi
--6404-- Page sizes: currently 4096, max supported 4096
--6404-- Valgrind library directory: /usr/lib/valgrind
--6404-- Reading syms from /home/killbyte/Documents/Curso/LI3/tester-project-li3/out
--6404-- Reading syms from /usr/lib/ld-2.28.so
--6404-- Reading syms from /usr/lib/valgrind/memcheck-amd64-linux
--6404--    object doesn't have a dynamic symbol table
--6404-- Scheduler: using generic scheduler lock implementation.
--6404-- Reading suppressions file: /usr/lib/valgrind/default.supp
==6404== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-6404-by-killbyte-on-???
==6404== embedded gdbserver: writing to   /tmp/vgdb-pipe-to-vgdb-from-6404-by-killbyte-on-???
==6404== embedded gdbserver: shared mem   /tmp/vgdb-pipe-shared-mem-vgdb-6404-by-killbyte-on-???
==6404== 
==6404== TO CONTROL THIS PROCESS USING vgdb (which you probably
==6404== don't want to do, unless you know exactly what you're doing,
==6404== or are doing some strange experiment):
==6404==   /usr/lib/valgrind/../../bin/vgdb --pid=6404 ...command...
==6404== 
==6404== TO DEBUG THIS PROCESS USING GDB: start GDB like this
==6404==   /path/to/gdb ./out
==6404== and then give GDB the following command
==6404==   target remote | /usr/lib/valgrind/../../bin/vgdb --pid=6404
==6404== --pid is optional if only one valgrind process is running
==6404== 
--6404-- REDIR: 0x401ff20 (ld-linux-x86-64.so.2:strlen) redirected to 0x580c9742 (vgPlain_amd64_linux_REDIR_FOR_strlen)
--6404-- REDIR: 0x401fcf0 (ld-linux-x86-64.so.2:index) redirected to 0x580c975c (vgPlain_amd64_linux_REDIR_FOR_index)
--6404-- Reading syms from /usr/lib/valgrind/vgpreload_core-amd64-linux.so
--6404-- Reading syms from /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
==6404== WARNING: new redirection conflicts with existing -- ignoring it
--6404--     old: 0x0401ff20 (strlen              ) R-> (0000.0) 0x580c9742 vgPlain_amd64_linux_REDIR_FOR_strlen
--6404--     new: 0x0401ff20 (strlen              ) R-> (2007.0) 0x0483ad80 strlen
--6404-- REDIR: 0x401c700 (ld-linux-x86-64.so.2:strcmp) redirected to 0x483be40 (strcmp)
--6404-- REDIR: 0x4020480 (ld-linux-x86-64.so.2:mempcpy) redirected to 0x483f860 (mempcpy)
--6404-- Reading syms from /usr/lib/libglib-2.0.so.0.5800.3
--6404--    object doesn't have a symbol table
--6404-- Reading syms from /usr/lib/libc-2.28.so
--6404-- Reading syms from /usr/lib/libpthread-2.28.so
--6404-- Reading syms from /usr/lib/libpcre.so.1.2.11
--6404--    object doesn't have a symbol table
--6404-- REDIR: 0x4a23060 (libc.so.6:strchrnul) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a3b800 (libc.so.6:wcslen) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a27b10 (libc.so.6:memrchr) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a3cf90 (libc.so.6:wcsnlen) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21b70 (libc.so.6:memcpy@@GLIBC_2.14) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21a20 (libc.so.6:strncasecmp) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a216c0 (libc.so.6:memmove) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
==6404== Preferring higher priority redirection:
--6404--     old: 0x04af6c60 (__memcpy_avx_unalign) R-> (2018.0) 0x0483c300 memcpy@@GLIBC_2.14
--6404--     new: 0x04af6c60 (__memcpy_avx_unalign) R-> (2018.1) 0x0483e8a0 memmove
--6404-- REDIR: 0x4a20840 (libc.so.6:strncpy) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a219d0 (libc.so.6:strcasecmp) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a20210 (libc.so.6:strcat) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a20880 (libc.so.6:rindex) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a23030 (libc.so.6:rawmemchr) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a3bca0 (libc.so.6:wmemchr) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a3b700 (libc.so.6:wcscmp) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21830 (libc.so.6:mempcpy) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21650 (libc.so.6:bcmp) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a207e0 (libc.so.6:strncmp) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a20290 (libc.so.6:strcmp) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21790 (libc.so.6:memset) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a3b6d0 (libc.so.6:wcschr) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a20770 (libc.so.6:strnlen) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a20340 (libc.so.6:strcspn) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a20300 (libc.so.6:strcpy) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a208b0 (libc.so.6:strpbrk) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a20250 (libc.so.6:index) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a20740 (libc.so.6:strlen) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21a70 (libc.so.6:strcasecmp_l) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21620 (libc.so.6:memchr) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a20b70 (libc.so.6:strspn) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21990 (libc.so.6:stpncpy) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21950 (libc.so.6:stpcpy) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21ac0 (libc.so.6:strncasecmp_l) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4aa1380 (libc.so.6:__memcpy_chk) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4a21540 (libc.so.6:strstr) redirected to 0x482d1c0 (_vgnU_ifunc_wrapper)
--6404-- REDIR: 0x4af6530 (libc.so.6:__strrchr_avx2) redirected to 0x483a790 (rindex)
--6404-- REDIR: 0x4af6700 (libc.so.6:__strlen_avx2) redirected to 0x483ac60 (strlen)
--6404-- REDIR: 0x4a1c8d0 (libc.so.6:malloc) redirected to 0x4837710 (malloc)
--6404-- REDIR: 0x4a1d6b0 (libc.so.6:calloc) redirected to 0x4839ab0 (calloc)
--6404-- REDIR: 0x4a1cf20 (libc.so.6:free) redirected to 0x4838940 (free)
==6404== 
==6404== HEAP SUMMARY:
==6404==     in use at exit: 18,604 bytes in 6 blocks
==6404==   total heap usage: 6 allocs, 0 frees, 18,604 bytes allocated
==6404== 
==6404== Searching for pointers to 6 not-freed blocks
==6404== Checked 101,040 bytes
==6404== 
==6404== 4 bytes in 1 blocks are still reachable in loss record 1 of 6
==6404==    at 0x483777F: malloc (vg_replace_malloc.c:299)
==6404==    by 0x488F5C3: ??? (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x488F6BB: g_private_get (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48B906D: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48F4CDE: g_hash_table_new_full (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48CE533: ??? (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x4010549: call_init.part.0 (in /usr/lib/ld-2.28.so)
==6404==    by 0x4010649: _dl_init (in /usr/lib/ld-2.28.so)
==6404==    by 0x4002039: ??? (in /usr/lib/ld-2.28.so)
==6404== 
==6404== 32 bytes in 1 blocks are still reachable in loss record 2 of 6
==6404==    at 0x4839B65: calloc (vg_replace_malloc.c:752)
==6404==    by 0x48D8839: g_malloc0 (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48F4D47: g_hash_table_new_full (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48CE533: ??? (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x4010549: call_init.part.0 (in /usr/lib/ld-2.28.so)
==6404==    by 0x4010649: _dl_init (in /usr/lib/ld-2.28.so)
==6404==    by 0x4002039: ??? (in /usr/lib/ld-2.28.so)
==6404== 
==6404== 64 bytes in 1 blocks are still reachable in loss record 3 of 6
==6404==    at 0x4839B65: calloc (vg_replace_malloc.c:752)
==6404==    by 0x48D8839: g_malloc0 (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48F4D31: g_hash_table_new_full (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48CE533: ??? (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x4010549: call_init.part.0 (in /usr/lib/ld-2.28.so)
==6404==    by 0x4010649: _dl_init (in /usr/lib/ld-2.28.so)
==6404==    by 0x4002039: ??? (in /usr/lib/ld-2.28.so)
==6404== 
==6404== 88 bytes in 1 blocks are still reachable in loss record 4 of 6
==6404==    at 0x483777F: malloc (vg_replace_malloc.c:299)
==6404==    by 0x48D88D1: g_malloc (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48B9094: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48F4CDE: g_hash_table_new_full (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48CE533: ??? (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x4010549: call_init.part.0 (in /usr/lib/ld-2.28.so)
==6404==    by 0x4010649: _dl_init (in /usr/lib/ld-2.28.so)
==6404==    by 0x4002039: ??? (in /usr/lib/ld-2.28.so)
==6404== 
==6404== 2,032 bytes in 1 blocks are still reachable in loss record 5 of 6
==6404==    at 0x4839B65: calloc (vg_replace_malloc.c:752)
==6404==    by 0x48D8839: g_malloc0 (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48B92EE: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48F4CDE: g_hash_table_new_full (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48CE533: ??? (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x4010549: call_init.part.0 (in /usr/lib/ld-2.28.so)
==6404==    by 0x4010649: _dl_init (in /usr/lib/ld-2.28.so)
==6404==    by 0x4002039: ??? (in /usr/lib/ld-2.28.so)
==6404== 
==6404== 16,384 bytes in 1 blocks are still reachable in loss record 6 of 6
==6404==    at 0x483777F: malloc (vg_replace_malloc.c:299)
==6404==    by 0x48D88D1: g_malloc (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x48CE545: ??? (in /usr/lib/libglib-2.0.so.0.5800.3)
==6404==    by 0x4010549: call_init.part.0 (in /usr/lib/ld-2.28.so)
==6404==    by 0x4010649: _dl_init (in /usr/lib/ld-2.28.so)
==6404==    by 0x4002039: ??? (in /usr/lib/ld-2.28.so)
==6404== 
==6404== LEAK SUMMARY:
==6404==    definitely lost: 0 bytes in 0 blocks
==6404==    indirectly lost: 0 bytes in 0 blocks
==6404==      possibly lost: 0 bytes in 0 blocks
==6404==    still reachable: 18,604 bytes in 6 blocks
==6404==         suppressed: 0 bytes in 0 blocks
==6404== 
==6404== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
==6404== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

The problem is that valgrind tells me in leak summary still reachable: 18,604 bytes in 6 blocks And i don't even have any code ... Not even the #include 问题是valgrind告诉我泄漏摘要still reachable: 18,604 bytes in 6 blocks而且我什至没有任何代码...甚至连#include

As Ctx said in a comment, these allocations are done in a library constructor function for GLib, which is called automatically before your main() function is entered. 正如Ctx在评论中所说,这些分配是在GLib的库构造函数中完成的,该函数在输入main()函数之前自动被调用。 They are done once in the process' lifetime to allocate various internal structures and caches. 它们在流程的生命周期中完成一次,以分配各种内部结构和缓存。

If you use the glib.supp suppression file installed by GLib in /usr/share/glib-2.0/valgrind/glib.supp , they should be suppressed. 如果您使用GLib在/usr/share/glib-2.0/valgrind/glib.supp安装的glib.supp抑制文件,则应将其抑制。 If any of them aren't, please file a bug against GLib . 如果不是,请针对GLib提交错误

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM