Valgrind的输出显示间接丢失的内存泄漏,但没有明确丢失或可能丢失

Confusing output from Valgrind shows indirectly lost memory leaks but no definitely lost or possibly lost

本文关键字:泄漏 显示 输出 Valgrind 内存      更新时间:2023-10-16

我在macos x 10.8上运行valgrind。Valgrind启动时显示

"==11312== WARNING: Support on MacOS 10.8 is experimental and mostly broken.
==11312== WARNING: Expect incorrect results, assertions and crashes.
==11312== WARNING: In particular, Memcheck on 32-bit programs will fail to
==11312== WARNING: detect any errors associated with heap-allocated data."

Valgrind给出了这个泄漏总结:

"LEAK SUMMARY:
==11312==    definitely lost: 0 bytes in 0 blocks
==11312==    indirectly lost: 48 bytes in 2 blocks
==11312==      possibly lost: 0 bytes in 0 blocks
==11312==    still reachable: 45,857 bytes in 270 blocks
==11312==         suppressed: 16,805 bytes in 87 blocks"

根据valgrindesfaq, http://valgrind.org/docs/manual/faq.html#faq.deflost,"间接丢失"意味着你的程序在一个基于指针的结构中泄漏内存。(例如,如果二叉树的根节点"绝对丢失",则所有子节点将"间接丢失"。)如果你修复了"绝对丢失"的泄漏,"间接丢失"的泄漏就会消失。

我没有任何明确丢失的泄漏或甚至可能丢失的泄漏修复。我该怎么补救?这个报告可能是10.8中valgrind的实验性质导致的bug吗?

我相信我将此编译为64位程序,因为编译器是64位编译器

我觉得回答自己的问题很奇怪。

是,mac上valgrind的报告不正确。根据linux上的valgrind,所有堆块都被释放了,所以没有泄漏的可能。

我真的希望valgrind修复mac的问题,因为我现在主要是在mac上开发。

Valgrind已更新使用(如果使用自制程序):

brew unlink valgrind
brew install valgrind

还有,你瞧:

==23998== LEAK SUMMARY:
==23998==    definitely lost: 0 bytes in 0 blocks
==23998==    indirectly lost: 0 bytes in 0 blocks
==23998==      possibly lost: 0 bytes in 0 blocks
==23998==    still reachable: 76,800 bytes in 2 blocks
==23998==         suppressed: 58,420 bytes in 359 blocks