Valgrind可能失去了记忆

时间:2017-08-28 06:17:45

标签: memory-leaks 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将记忆报告为“可能丢失”?是丢失还是不是在这个特定的执行中。在我看来,内存泄漏应该比“可能丢失”更黑和白。

1 个答案:

答案 0 :(得分:1)

大致类别

  • 仍然在使用=退出时有一个指向内存的实时指针
  • 绝对丢失=没有指向内存的实时指针
  • 间接丢失=有指向内存的指针,但指针本身在"肯定丢失"存储器中。
  • 可能丢失=有一个指针,但不是内存的开头。

Valgrind可能会发现可能丢失的主要原因是

  1. 一些意外指向该块的垃圾指针。你应该认为这是一种明确的损失。
  2. 分配子块或保护带的内存管理器。
  3. 因此,作为一项规则,如果您不使用内存管理器,请将可能的损失视为明确的损失。