【发布时间】:2015-11-11 18:59:19
【问题描述】:
我对 valgrind 中的“额外”内存泄漏有疑问。例如,我创建了一个名为 temp.cpp 的测试程序:
int main() { return 0; }
在终端中,我运行:
>> g++ -o temp.out temp.cpp
>> valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./temp.out
这会导致多次内存泄漏。这怎么可能?
==4438== LEAK SUMMARY:
==4438== definitely lost: 4,120 bytes in 2 blocks
==4438== indirectly lost: 2,288 bytes in 6 blocks
==4438== possibly lost: 8,336 bytes in 99 blocks
==4438== still reachable: 6,440 bytes in 13 blocks
==4438== suppressed: 5,020 bytes in 73 blocks
我尝试过运行其他 .cpp 文件并且得到完全相同的泄漏摘要。大约一个月前,当我尝试时,没有任何问题。如果这可能是问题(?),我可能已经升级了 Xcode 或其他东西。这些是我对 g++ 的设置:
配置:
--prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1
Apple LLVM 版本 6.1.0 (clang-602.0.53)(基于 LLVM 3.6.0svn) 目标:x86_64-apple-darwin15.0.0 线程模型:posix
【问题讨论】:
-
FWIW,我没有在带有 GCC 5.2 的 Linux/Debian/x86-64 上观察到这一点;
valgrind中的三个“丢失”行给了我 0;同样适用于 Clang 3.7;这可能是 MacOSX 特有的问题 -
听起来您应该向 valgrind 人员提交错误报告。我不确定您希望 stackoverflow 如何为您提供帮助。
-
有时第三方库会造成您无法修复的泄漏(除非您修复了库)。它们由 valgrind 报告,但您可以使用 valgrind 中的 sup 文件来抑制它们。出于某种原因,也许您的 libc 泄漏或加载程序......拥有完整的回溯会很有趣。