Valgrind在空函数中报告“仍然可以访问”

时间:2013-01-28 15:26:07

标签: c valgrind

我正在使用valgrind来检查我的C应用程序的内存使用情况。在第一次测试valgrind报告之后:

"still reachable: 2,248 bytes in 1 blocks".

我检查了代码,但我一眼就看不到问题。所以我开始评论代码的各个部分,试图找到问题所在。

在我的代码中我离开时感到很震惊

int main(void)
{

}; 

和STILL获取消息,唯一的区别在于字节数。

我真的对此感到困惑......

这是完整的消息:

Running with options : valgrind --leak-check=full --show-reachable=yes

==2557== HEAP SUMMARY:
==2557==     in use at exit: 2,248 bytes in 1 blocks
==2557==   total heap usage: 362 allocs, 361 frees, 14,579 bytes allocated
==2557== 
==2557== 2,248 bytes in 1 blocks are still reachable in loss record 1 of 1
==2557==    at 0x4006171: calloc (vg_replace_malloc.c:593)
==2557==    by 0x4D72250B: monstartup (in /usr/lib/libc-2.15.so)
==2557==    by 0x8048650: __gmon_start__ (in /home/elias/Documents/SL_HTTP/Endosos/bin/Debug/Endosos)
==2557==    by 0x4005421: ??? (in /usr/local/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2557== 
==2557== LEAK SUMMARY:
==2557==    definitely lost: 0 bytes in 0 blocks
==2557==    indirectly lost: 0 bytes in 0 blocks
==2557==      possibly lost: 0 bytes in 0 blocks
==2557==    still reachable: 2,248 bytes in 1 blocks
==2557==         suppressed: 0 bytes in 0 blocks
==2557== 
==2557== For counts of detected and suppressed errors, rerun with: -v
==2557== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Profiling timer expired

我正在使用Fedrora 17中的gcc 4.7.2编译

任何建议将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

这是完全正确和安全的忽略。在这种情况下,这是一个似乎已通过分析分配的内存(您可能正在编译启用了分析的代码或链接到某个库)。

在调用main之前,你的环境会做很多事情来设置,那些东西可以分配内存。因为他们知道在程序退出之前会使用这个内存,所以在退出时它们不会费心free因为这只需要时间就没有任何好处。大部分内存将被valgrind报告为“仍然可以访问”,可以安全地忽略。

答案 1 :(得分:0)

感谢所有人。

你是对的。

我正在使用Code:Blocks 12.11,默认情况下它在编译器设置中启用了-pg。