memory-leaks - 直接泄漏和间接泄漏有什么区别?

标签 memory-leaks valgrind memory-leak-detector leak-sanitizer

我从LeakSanitizer工具获得以下输出。正如工具所了解的那样,直接泄漏和间接泄漏有什么区别?

13: ==29107==ERROR: LeakSanitizer: detected memory leaks
13: 
13: Direct leak of 288 byte(s) in 6 object(s) allocated from:
13:     #0 0x7f2ce0089050 in __interceptor_malloc (/nix/store/zahs1kwq4742f6l6h7yy4mdj44zzc1kd-gcc-7-20170409-lib/lib/libasan.so+0xd9050)
13:     #1 0x7f2cdfb974fe in qdr_core_subscribe ../src/router_core/route_tables.c:149
13:     #2 0x7f2cdfb47ff0 in IoAdapter_init ../src/python_embedded.c:548
13:     #3 0x7f2cde966ecd in type_call (/nix/store/1snk2wkpv97an87pk1842fgskl1vqhkr-python-2.7.14/lib/libpython2.7.so.1.0+0x9fecd)
13: 
13: Indirect leak of 2368 byte(s) in 1 object(s) allocated from:
13:     #0 0x7f2ce0089b88 in __interceptor_posix_memalign (/nix/store/zahs1kwq4742f6l6h7yy4mdj44zzc1kd-gcc-7-20170409-lib/lib/libasan.so+0xd9b88)
13:     #1 0x7f2cdfbcc8ea in qd_alloc ../src/alloc_pool.c:182
13:     #2 0x7f2cdfbb6c6b in qd_server_connection ../src/server.c:500
13:     #3 0x7f2cdfbbe27d in on_accept ../src/server.c:531
13:     #4 0x7f2cdfbbe27d in handle_listener ../src/server.c:701
13:     #5 0x7f2cdfbbe27d in handle ../src/server.c:844
13:     #6 0x7f2cdfbc2837 in thread_run ../src/server.c:921
13:     #7 0x7f2cdf0ba233 in start_thread (/nix/store/zpg78y1mf0di6127q6r51kgx2q8cxsvv-glibc-2.25-49/lib/libpthread.so.0+0x7233)
[...]

最佳答案

LSan Wiki design document指出:


另一个有用的功能是能够区分直接泄漏
块(无法从任何地方访问)和间接泄漏的块(可访问)
从其他泄漏的块)。


换句话说,间接泄漏是直接泄漏的结果。修复直接泄漏应使间接泄漏本身成为固定泄漏或直接泄漏(分别取决于其内存管理是否正确实施)。

关于memory-leaks - 直接泄漏和间接泄漏有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46573427/

相关文章:

c++ - 具有内存分配的函数中的C++析构函数静态变量

c - valgrind block 肯定丢失在丢失记录中

c++ - 如何对守护程序进行内存检查?

ios - iOS NSZombiesEnabled =是

c# - 这个 object-lifetime-extending-closure 是 C# 编译器错误吗?

ios - KVO 和上下文可能导致内存泄漏

php - 哪里可能是 php 中的内存泄漏以及如何调查它?

luaL_newstate 在 valgrind 下没有成功?

c++ - Qt 内存错误 - 需要 valgrind 跟踪分析帮助

python - 是否有任何适用于 Python3 的工作内存分析器