简体   繁体   English

Valgrind堆总结理解

[英]Valgrind heap summary understanding

I am running a code and I encounter the error as我正在运行一个代码,我遇到了错误

* glibc detected * /home/build/bin/../bin/OPENSUSE_12.2_X86_64/reader: corrupted double-linked list: 0x0000000003df6dc0 * * 检测到 glibc * /home/build/bin/../bin/OPENSUSE_12.2_X86_64/reader:损坏的双链表:0x0000000003df6dc0 *

I tried to re-run it by valgrind to know whether if any memory leak is the problem.我尝试通过 valgrind 重新运行它,以了解是否存在内存泄漏问题。 I run it as我运行它

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

since the program does not complete and stops the valgrind summary is as below:由于程序未完成并停止,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)

in the total heap usage: 1,922 allocs, 848 frees and I wonder if here might be any problem?总堆使用量:1,922 个分配,848 个释放,我想知道这里是否有问题? but in error summary there is no error.但在错误摘要中没有错误。 I wonder if I should be concerned about any problem in the code or memory leak?我想知道我是否应该关注代码或内存泄漏中的任何问题?

This summary basically means that you didn't discard any pointers (set them to NULL ) without first freeing associated allocated memory.这个总结基本上意味着你没有在没有首先释放关联的分配内存的情况下丢弃任何指针(将它们设置为NULL )。 When the program exits, any allocated memory (whether leaked or not) will be freed regardless.当程序退出时,任何分配的内存(无论是否泄漏)都将被释放。 However, you are correct - you are not leaking any memory, so if your program runs for an extended period of time, you won't run out of heap space.但是,您是对的 - 您没有泄漏任何内存,因此如果您的程序运行很长时间,您将不会耗尽堆空间。

Ideally though, you should still try to clean up after yourself - look for malloc calls, without any corresponding free calls.理想情况下,您仍然应该尝试自己清理 - 寻找malloc调用,而没有任何相应的free调用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM