解码从Valgrind的输出(Decoding output from valgrind)

2019-10-23 15:28发布

我想了解从Valgrind的输出具有如下执行它:的valgrind --leak检查= YES“someprogram”

输出是在这里:

==30347== 
==30347== HEAP SUMMARY:
==30347==     in use at exit: 126,188 bytes in 2,777 blocks
==30347==   total heap usage: 4,562 allocs, 1,785 frees, 974,922 bytes       
        allocated
==30347== 
==30347== LEAK SUMMARY:
==30347==    definitely lost: 0 bytes in 0 blocks
==30347==    indirectly lost: 0 bytes in 0 blocks
==30347==      possibly lost: 0 bytes in 0 blocks
==30347==    still reachable: 126,188 bytes in 2,777 blocks
==30347==         suppressed: 0 bytes in 0 blocks
==30347== Reachable blocks (those to which a pointer was found) are   
          not shown.
==30347== To see them, rerun with: --leak-check=full --show-reachable=yes
==30347== 
==30347== For counts of detected and suppressed errors, rerun with: -v
==30347== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

根据输出没有丢失字节,但人们似乎仍可达块。 所以,我有内存泄漏?

在此先感谢您的帮助。

Answer 1:

没有。

您最关心的可达块。 你在这里看到的是,有仍在“指点”在内存可达块活动变量。 他们仍然在范围内。

不可到达的块将是,例如,记忆您已经动态分配,使用一段时间,然后所有的引用它已经出来的,即使程序仍在执行的范围。 既然你不再有指向他们的任何手柄,他们现在无法恢复,造成内存泄漏。

下面是从报价Valgrind的文档:

“仍然可达”是指你的程序可能是好的 - 它不释放一些内存它可能有。 这是很常见的,往往是合理的。 不要使用 - 显示,可达= yes如果你不想看到这些报道。



文章来源: Decoding output from valgrind