【问题标题】:Valgrind results clean but with more allocs than freesValgrind 结果很干净,但分配比释放更多
【发布时间】:2012-11-26 05:48:41
【问题描述】:

我从 Valgrind 得到这个结果:

    ==24810== HEAP SUMMARY:
    ==24810==     in use at exit: 0 bytes in 0 blocks
    ==24810==   total heap usage: 9 allocs, 6 frees, 0 bytes allocated
    ==24810== 
    ==24810== LEAK SUMMARY:
    ==24810==    definitely lost: 0 bytes in 0 blocks
    ==24810==    indirectly lost: 0 bytes in 0 blocks
    ==24810==      possibly lost: 0 bytes in 0 blocks
    ==24810==    still reachable: 0 bytes in 0 blocks
    ==24810==         suppressed: 0 bytes in 0 blocks

它说没有内存泄漏。在我看来这是一个很好的结果。但是,这些9 个分配,6 个释放呢?看起来我还没有在某处释放一些内存。我检查了代码,有 3 个全局 const 指针。也许他们没有被认为是错误但被打印为不是免费的?

我应该担心这个还是应该认为代码没有错误? 谢谢你们。 ....只是试图理解指针和内存分配的所有 ANSI C 麻烦:)))

格言

【问题讨论】:

  • 它说总堆使用量是0 bytes allocated,它们可能是空分配吗?可以发一些代码吗?
  • valgrind 算不算reallocs?
  • @Nick Nah,这仍然会导致非 0 块丢失。
  • g++ 在 Linux Ubuntu 10 上。Valgrind 实际上只适用于 Linux 上的 gcc&family
  • 好吧,如果 valgrind 计算 reallocs,那么在 9 个 allocs 中可能有 3 个带有非 NULL 指针参数的 reallocs,所以这一切都加起来了。查源呢?

标签: c pointers memory-leaks heap-memory valgrind


【解决方案1】:

在 valgrind 网站上http://valgrind.org/docs/manual/quick-start.html#quick-start.interpret

“肯定丢失”:您的程序正在泄漏内存——修复它!

“可能丢失”:您的程序正在泄漏内存,除非您正在这样做 带有指针的有趣事物(例如将它们移动到中间 堆块)。

所以对于你的情况,你的程序应该是好的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-27
    • 2015-03-30
    • 2017-10-31
    • 2017-01-08
    • 2014-04-12
    • 2016-06-10
    • 2021-06-25
    • 2016-10-10
    相关资源
    最近更新 更多