我已经看过一些关于valgrind的帖子,但没有一篇文章帮助我理解valgrind输出的解释。 我用valgrind运行了两个程序(两个都有内存泄漏)
测试1的样本输出
==20422== LEAK SUMMARY:
==20422== definitely lost: 448 bytes in 3 blocks
==20422== indirectly lost: 786,460 bytes in 1 blocks
==20422== possibly lost: 1,576,052 bytes in 46 blocks
==20422== still reachable: 1,077,107 bytes in 2,333 blocks
==20422== suppressed: 0 bytes in 0 blocks
==20422== Rerun with --leak-check=full to see details of leaked memory
==20422==
==20422== For counts of detected and suppressed errors, rerun with: -v
==20422== ERROR SUMMARY: 98307 errors from 5 contexts (suppressed: 2 from 2)
Killed
测试2的输出
==20875== HEAP SUMMARY:
==20875== in use at exit: 1,059,198 bytes in 2,047 blocks
==20875== total heap usage: 3,019 allocs, 972 frees, 4,496,090 bytes allocated
==20875==
==20875== LEAK SUMMARY:
==20875== definitely lost: 328 bytes in 2 blocks
==20875== indirectly lost: 0 bytes in 0 blocks
==20875== possibly lost: 1,600 bytes in 5 blocks
==20875== still reachable: 1,057,270 bytes in 2,040 blocks
==20875== suppressed: 0 bytes in 0 blocks
==20875== Rerun with --leak-check=full to see details of leaked memory
==20875==
==20875== For counts of detected and suppressed errors, rerun with: -v
==20875== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
如果查看错误摘要,One输出显示有错误,其他输出显示没有错误(最终都有泄漏)
我的问题是 - - 在valgrind中算什么错误? (valgrind手册对我没有帮助)
答案 0 :(得分:6)
内存泄漏不被视为错误,它们不会影响程序的逻辑。
错误是诸如无效读取和写入之类的事情。
作为评论的结果更新:测试1中的无效读写是针对5个不同的内存区域,访问次数为98307次。
查看泄漏情况,测试1中的大量间接损失可能表示链接数据结构,其中只删除了根。
测试2中的泄漏并不算太糟糕。正如valgrind建议重新运行--leak-check = full,这应该表明哪一位代码导致了问题。
可以找到错误的完整说明here