6

我通过 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 是否抑制了我应该寻找的某种错误?我在网上找不到有关此的任何信息

4

3 回答 3

5

Valgrind 在与从 shell 运行程序不同的环境中运行程序。当与内存耗尽或数组出站相关时,这可以防止一些崩溃。

纠正你的 140 个错误上下文,你会没事的。

于 2012-06-12T13:10:00.757 回答
3

Memcheck 不执行完整的边界检查,并且因为它有自己的内存分配器,它可能会抑制您可能会遇到的错误。请改用调试器。

于 2012-06-12T12:53:46.770 回答
2

Valgrind 有时无法捕获的错误的一个示例是当您释放内存然后通过另一个也指向同一位置的指针引用它时。

我不确定为什么会这样。也许 Valgrind 环境以不同的方式处理内存分配和释放。[正如埃瑞格里斯所说]

检查这一点的一种快速方法是暂时注释您的 free() 函数调用,看看它是否仍然存在段错误。[稍后取消注释,一旦你修复它们!]

于 2016-01-28T09:49:40.037 回答