只是想在linuxGCC下用C++17编写的SDL2小程序上检测一些潜在的问题。
valgrind报告大量嘈杂的内存泄漏事件。vg_replace_malloc.c
建议忽略正式文件中的内容。(链接)
(忽略 "vg_replace_malloc.c",那是一个实现细节)。
但是后面分析,有一个块的。
==9891== 256 bytes in 4 blocks are definitely lost in loss record 2,243 of 2,414
==9891== at 0x483980B: malloc (vg_replace_malloc.c:309)
==9891== by 0x40156B3: dl_open_worker (in /usr/lib64/ld-2.30.so)
==9891== by 0x4E60407: _dl_catch_exception (in /usr/lib64/libc-2.30.so)
==9891== by 0x40148FD: _dl_open (in /usr/lib64/ld-2.30.so)
==9891== by 0x4EF139B: dlopen_doit (in /usr/lib64/libdl-2.30.so)
==9891== by 0x4E60407: _dl_catch_exception (in /usr/lib64/libc-2.30.so)
==9891== by 0x4E604D2: _dl_catch_error (in /usr/lib64/libc-2.30.so)
==9891== by 0x4EF1B08: _dlerror_run (in /usr/lib64/libdl-2.30.so)
==9891== by 0x4EF1429: dlopen@@GLIBC_2.2.5 (in /usr/lib64/libdl-2.30.so)
==9891== by 0x493CC37: ??? (in /usr/lib64/libSDL2-2.0.so.0.12.0)
==9891== by 0x4941DC5: ??? (in /usr/lib64/libSDL2-2.0.so.0.12.0)
==9891== by 0x494C3CC: ??? (in /usr/lib64/libSDL2-2.0.so.0.12.0)
我想知道这是否是某种库的依赖,或者是假阳性,或者是隐隐约约的指向与我的代码有关的东西... ...
有谁能给我更多的启示,如何解释这个问题 definitely lost
字节片段?
该输出的问题是使用 SDL2
在编译时没有调试信息的包库中。
因此,重新编译 SDL2
库的源码,包括调试信息,使之成为了 valgrind
报告清晰了很多,引导解决和理解了问题。