我宣布在C简单的字符串:为什么char * T =“hello”;不会泄漏内存?
#include <stdio.h>
int main()
{
char *t1 = "hello";
return 0;
}
正如你看到的,我没有在我的代码的任何free
。我valgrind
检查的话,用这个命令:
valgrind --tool=memcheck --track-origins=yes --leak-check=yes --show-reachable=yes -v --track-fds=yes ./test
,并说:
==4329== HEAP SUMMARY:
==4329== in use at exit: 0 bytes in 0 blocks
==4329== total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==4329==
==4329== All heap blocks were freed -- no leaks are possible
==4329==
==4329== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
这是为什么?我的意思是,我用了一个指针*T
,但没有释放任何地方。我认为它应该给我一个内存泄漏。为什么不?
你必须(m)分配一些东西来泄漏一些东西。 –
如果你没有'malloc()'任何东西,你不必'free()'任何东西。 – user2422531
只要看看valgrind的输出,它就会说“堆概要”:堆是动态分配的东西(即'malloc'ed)的东西。 – effeffe