我用valgrind得到了最后的“完成”消息,并获得此退出报告:
==3434== HEAP SUMMARY:
==3434== in use at exit: 8,432 bytes in 4 blocks
==3434== total heap usage: 4,369 allocs, 8,037 frees, 377,356 bytes allocated
==3434==
==3434== LEAK SUMMARY:
==3434== definitely lost: 152 bytes in 1 blocks
==3434== indirectly lost: 0 bytes in 0 blocks
==3434== possibly lost: 0 bytes in 0 blocks
==3434== still reachable: 8,192 bytes in 2 blocks
==3434== suppressed: 88 bytes in 1 blocks
==3434== Rerun with --leak-check=full to see details of leaked memory
==3434==
==3434== For counts of detected and suppressed errors, rerun with: -v
==3434== ERROR SUMMARY: 100190 errors from 140 contexts (suppressed: 0 from 0)
但是当我在没有valgrind的情况下运行它时,会立即发生段错误。 valgrind会抑制我应该寻找的某种错误吗?我在网上找不到任何关于此的信息
答案 0 :(得分:4)
Valgrind在不同于从shell运行程序的环境中运行程序。 相对于内存耗尽或数组出站,这可以防止一些崩溃。
纠正你的140个错误背景,你会没事的。
答案 1 :(得分:3)
Memcheck不会执行完整的边界检查,因为它拥有自己的内存分配器,它可能会抑制您可能获得的错误。改为使用调试器。
答案 2 :(得分:2)
Valgrind有时未捕获的错误的一个例子是当你释放内存然后通过指向同一位置的另一个指针引用它时。
我不确定为什么会这样。也许Valgrind环境以不同方式处理内存分配和释放。 [正如Eregrith所说]
检查此问题的一种快速方法是临时评论您的free()函数调用,看看它是否仍然是段错误。 [稍后取消注释,一旦修复它们!]