2017-08-28 70 views
0

当运行valgrind与--leak-check=full时,生成的报告包含有关内存“可能丢失”的信息。Valgrind可能丢失内存

valgrind手册中有一些相关信息,以及一些示例报告。

http://valgrind.org/docs/manual/mc-manual.html

LEAK SUMMARY: 
    definitely lost: 4 bytes in 1 blocks 
    indirectly lost: 0 bytes in 0 blocks 
    possibly lost: 0 bytes in 0 blocks 
    still reachable: 95 bytes in 6 blocks 
         of which reachable via heuristic: 
         stdstring   : 56 bytes in 2 blocks 
         length64   : 16 bytes in 1 blocks 
         newarray   : 7 bytes in 1 blocks 
         multipleinheritance: 8 bytes in 1 blocks 
     suppressed: 0 bytes in 0 blocks 

在我自己的系统,我的valgrind执行我的多线程测试二进制文件时得到充足的“可能”失去的记忆的。

这究竟意味着valgrind会将内存报告为“可能丢失”?它在这个特定的执行过程中是失败了还是不是?在我看来,内存泄漏应该比“可能丢失”更加黑白。

+0

我认为你链接的文档解释了什么被认为是“可能丢失”的块,以及为什么报告通常不会显示黑白结果。 – VTT

回答

1

大致类别是

  • 仍然在使用=有一个活指针到所述存储器的出口
  • 绝对丢失=没有活指针存储器
  • 间接丢失=有指向内存的指针,但它们处于“绝对丢失”的内存中。
  • 可能丢失=有一个指针,但不是内存的开始。

的主要原因在于Valgrind的将检测可能丢失或者是

  1. 一些垃圾指针意外指向成块。你应该认为这是一个确定的损失。
  2. 分配子块或保护带的内存管理器。

因此,通常,如果您不使用内存管理器,请将您的可能损失视为确定的损失。