Memory leaks 内存泄漏:肯定丢失或可能丢失
当我通过向代码中添加泄漏来运行valgrind时,我得到的泄漏对于第一次分配的块仍然是可到达的,然后对于9个块显示为肯定丢失。可能丢失是由于代码的其他部分而显示的。为什么会这样Memory leaks 内存泄漏:肯定丢失或可能丢失,memory-leaks,valgrind,Memory Leaks,Valgrind,当我通过向代码中添加泄漏来运行valgrind时,我得到的泄漏对于第一次分配的块仍然是可到达的,然后对于9个块显示为肯定丢失。可能丢失是由于代码的其他部分而显示的。为什么会这样 main() { ........ char *ptr; For(i=0;i<10;i++) { ptr=malloc(sizeof * ptr); } ..... } 报告说: “可能迷路了”。[…]这意味着找到了指向块的一个或多个指针链,但至少有一个指针是内部指针。这可能只是内存中的一个随机值,它恰好
main()
{
........
char *ptr;
For(i=0;i<10;i++)
{
ptr=malloc(sizeof * ptr);
}
.....
}
报告说:
- “可能迷路了”。[…]这意味着找到了指向块的一个或多个指针链,但至少有一个指针是内部指针。这可能只是内存中的一个随机值,它恰好指向一个块,因此,除非知道内部指针,否则不应该考虑这一点。
因此,通常只有当堆上有嵌套的数据结构,指针指向分配时,才会发生这种情况,在偏移量处,而不是直接在开始处。除了Florian的答案之外,下面是一些内部指针的示例
那么我怎样才能解决可能丢失的案件呢?你能举个例子让我更清楚一些吗。
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