Valgrind结果干净,但allocs多于frees
我从Valgrind得到这个结果:Valgrind结果干净,但allocs多于frees,c,pointers,memory-leaks,heap,valgrind,C,Pointers,Memory Leaks,Heap,Valgrind,我从Valgrind得到这个结果: ==24810== HEAP SUMMARY: ==24810== in use at exit: 0 bytes in 0 blocks ==24810== total heap usage: 9 allocs, 6 frees, 0 bytes allocated ==24810== ==24810== LEAK SUMMARY: ==24810== definitely lost: 0
==24810== HEAP SUMMARY:
==24810== in use at exit: 0 bytes in 0 blocks
==24810== total heap usage: 9 allocs, 6 frees, 0 bytes allocated
==24810==
==24810== LEAK SUMMARY:
==24810== definitely lost: 0 bytes in 0 blocks
==24810== indirectly lost: 0 bytes in 0 blocks
==24810== possibly lost: 0 bytes in 0 blocks
==24810== still reachable: 0 bytes in 0 blocks
==24810== suppressed: 0 bytes in 0 blocks
上面说没有内存泄露。在我看来这是个好结果。但是,这9个allocs,6个frees呢?看来我还没有释放出一些记忆。我检查了代码,有3个全局常量指针。也许他们没有被认为是错误,但打印出来的不是免费的
我应该担心这一点,还是应该考虑代码没有错误?
谢谢大家。
..只是想了解ANSI C在指针和内存分配方面的所有麻烦:))
valgrind网站上的maxim
“绝对丢失”:您的程序正在泄漏内存--请修复它
“可能丢失”:您的程序正在泄漏内存,除非您正在这样做
有指针的有趣的事情(例如移动指针指向中间
堆块的一部分)
所以对于您的情况,您的程序应该是好的。它说总堆使用率是
0字节分配的
,它们可能是空分配吗?你能发布一些代码吗?valgrind算不算reallocs?@Nick Nah,这仍然会导致Linux Ubuntu 10上的非0 lost blocks.g++。Valgrind实际上只适用于LinuxWell上的gcc&family,如果Valgrind计数为realloc
s,那么在9个alloc
s中可能有3个realloc
s的非NULL
指针参数,因此所有这些参数相加。检查来源怎么样?