当我通过在代码中添加泄漏来运行valgrind时,对于第一个块分配,我仍然发现泄漏仍然可以实现,然后显示为9个块的绝对丢失。可能由于代码的其他部分而丢失。为什么会这样?
main()
{
........
char *ptr;
For(i=0;i<10;i++)
{
ptr=malloc(sizeof * ptr);
}
.....
}
报告:
HEAP SUMMARY:
==13832== in use at exit: 202,328 bytes in 62 blocks
==13832== total heap usage: 332 allocs, 270 frees, 283,928 bytes allocated
==13832==
==13832== LEAK SUMMARY:
==13832== definitely lost: 90 bytes in 9 blocks
==13832== indirectly lost: 0 bytes in 0 blocks
==13832== possibly lost: 202,180 bytes in 49 blocks
==13832== still reachable: 58 bytes in 4 blocks
==13832== suppressed: 0 bytes in 0 blocks
==13832== Rerun with --leak-check=full to see details of leaked memory
答案 0 :(得分:1)
memcheck
manual这样说:
- “可能丢失”。 […]这意味着已找到一个或多个指向该块的指针链,但是至少一个指针是内部指针。这可能只是内存中的一个随机值,恰好指向一个块,因此除非您知道您有内部指针,否则您不应该认为这很好。
因此,通常只有当您在堆上具有嵌套的数据结构(指针指向一个分配,偏移而不是直接指向开头)时,才会发生这种情况。
答案 1 :(得分:1)
在Florian的回答中,以下是一些内部指针的示例