Valgrind结果干净,但allocs多于frees

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

我从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 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
指针参数,因此所有这些参数相加。检查来源怎么样?