Valgrind堆摘要理解

问题描述 投票:1回答:1

我正在运行代码,但遇到错误为>]

*检测到glibc *

/home/build/bin/../bin/OPENSUSE_12.2_X86_64/reader:已损坏双向链接列表:0x0000000003df6dc0 *

我试图通过valgrind重新运行它,以了解是否存在任何内存泄漏问题。我将其运行为

valgrind --leak-check = full -v ./myprog

由于程序未完成并停止了valgrind摘要,如下所示:

>     ==5335== Process terminating with default action of signal 2 (SIGINT)
>     ==5335==    at 0x54E4007: kill (in /lib64/libc-2.15.so)
>     ==5335==    by 0x429473: ??? (in /bin/bash)
>     ==5335==    by 0x42A313: wait_for (in /bin/bash)
>     ==5335==    by 0x462BFE: execute_command_internal (in /bin/bash)
>     ==5335==    by 0x463360: execute_command (in /bin/bash)
>     ==5335==    by 0x41B7F0: reader_loop (in /bin/bash)
>     ==5335==    by 0x41B4C9: main (in /bin/bash)
>     ==5335== 
>     ==5335== HEAP SUMMARY:
>     ==5335==     in use at exit: 37,513 bytes in 1,074 blocks
>     ==5335==   total heap usage: 1,922 allocs, 848 frees, 72,605 bytes allocated
>     ==5335== 
>     ==5335== Searching for pointers to 1,074 not-freed blocks
>     ==5335== Checked 220,224 bytes
>     ==5335== 
>     ==5335== LEAK SUMMARY:
>     ==5335==    definitely lost: 0 bytes in 0 blocks
>     ==5335==    indirectly lost: 0 bytes in 0 blocks
>     ==5335==      possibly lost: 0 bytes in 0 blocks
>     ==5335==    still reachable: 37,513 bytes in 1,074 blocks
>     ==5335==         suppressed: 0 bytes in 0 blocks
>     ==5335== Reachable blocks (those to which a pointer was found) are not shown.
>     ==5335== To see them, rerun with: --leak-check=full --show-reachable=yes
>     ==5335== 
>     ==5335== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
>     --5335-- 
>     --5335-- used_suppression:      2 dl-hack3-cond-1
>     ==5335== 
>     ==5335== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

在总堆使用量中:1,922个分配,848个释放,我想知道这是否有问题?但错误摘要中没有错误。我想知道我是否应该担心代码或内存泄漏中的任何问题?

我正在运行代码,并且由于* glibc检测到* /home/build/bin/../bin/OPENSUSE_12.2_X86_64/reader:损坏的双链表:0x0000000003df6dc0 *,我尝试重新运行它...

c++ valgrind heap-memory
1个回答
0
投票

此摘要基本上意味着,在没有首先释放关联的已分配内存之前,您不会丢弃任何指针(将它们设置为NULL)。程序退出时,无论如何分配的所有已分配内存(无论是否泄漏)都将被释放。但是,您是对的-您不会泄漏任何内存,因此,如果程序长时间运行,则不会耗尽堆空间。

© www.soinside.com 2019 - 2024. All rights reserved.