我宣佈在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