2011-09-30 69 views
0
// loads a file into memory 
void load_file() 
{ 
    char *data = "This is so data"; 
    printf("function: %s\n", data); 

} 

上面的代碼會泄漏內存嗎?我有免費通話(數據)嗎?爲什麼或者爲什麼不?我是否必須從每個初始化的字符串中釋放內存?

+1

經驗法則:只有'免費'你'malloc'。 –

+1

@EtiennedeMartel:甜,所以我可以刪除所有的電話到'free',我之前在那裏調用'calloc'和'valloc'嗎? :) – Joe

+1

@Joe Meh,當我寫我的評論時,我雖然「噢,有人會去挑剔我沒有提到'malloc'變種...... meh,可能不是這個事實。看起來我錯了。 –

回答

2

它不能泄漏,因爲你沒有動態分配它。 data是一個字符串文字,不是動態分配的字符數組。

+0

謝謝。我想我現在得到它後,你的答覆和搜索文字等。基本上,它進入.data部分,你只能得到內存泄漏的東西進入.bss部分。 – user968102

+0

@ user968102:您只能泄漏_heap_上的內存,.bss用於未初始化的_data_。 – ninjalj

1

你不在那裏分配任何內存,所以沒有內存泄漏。您只需將指針複製到可執行映像中的現有字符串,而不是字符串本身。

因此,data的類型應爲const char*以防止意外更改爲data指向的字符串。

data本身是一個指針,它被分配在堆棧上,就像int i = 5;中的i那樣。這種隱式分配也會自動解除分配。

相關問題