2013-11-09 46 views
3

我宣佈在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,但沒有釋放任何地方。我認爲它應該給我一個內存泄漏。爲什麼不?

+0

你必須(m)分配一些東西來泄漏一些東西。 –

+0

如果你沒有'malloc()'任何東西,你不必'free()'任何東西。 – user2422531

+0

只要看看valgrind的輸出,它就會說「堆概要」:堆是動態分配的東西(即'malloc'ed)的東西。 – effeffe

回答

2

您沒有分配內存。您要在可執行文件的數據段中創建一個常量字符串,並指定一個指向該內存位置的指針。釋放它(或寫入該內存位置)將是一個錯誤(未定義的行爲)。

2

它不是使用malloc的運行時內存分配,需要將其釋放回來。對於這個靜態分配,釋放內存是直接在程序範圍退出時完成的。