// loads a file into memory
void load_file()
{
char *data = "This is so data";
printf("function: %s\n", data);
}
上面的代碼會泄漏內存嗎?我有免費通話(數據)嗎?爲什麼或者爲什麼不?我是否必須從每個初始化的字符串中釋放內存?
// loads a file into memory
void load_file()
{
char *data = "This is so data";
printf("function: %s\n", data);
}
上面的代碼會泄漏內存嗎?我有免費通話(數據)嗎?爲什麼或者爲什麼不?我是否必須從每個初始化的字符串中釋放內存?
它不能泄漏,因爲你沒有動態分配它。 data
是一個字符串文字,不是動態分配的字符數組。
謝謝。我想我現在得到它後,你的答覆和搜索文字等。基本上,它進入.data部分,你只能得到內存泄漏的東西進入.bss部分。 – user968102
@ user968102:您只能泄漏_heap_上的內存,.bss用於未初始化的_data_。 – ninjalj
你不在那裏分配任何內存,所以沒有內存泄漏。您只需將指針複製到可執行映像中的現有字符串,而不是字符串本身。
因此,data
的類型應爲const char*
以防止意外更改爲data
指向的字符串。
data
本身是一個指針,它被分配在堆棧上,就像int i = 5;
中的i
那樣。這種隱式分配也會自動解除分配。
經驗法則:只有'免費'你'malloc'。 –
@EtiennedeMartel:甜,所以我可以刪除所有的電話到'free',我之前在那裏調用'calloc'和'valloc'嗎? :) – Joe
@Joe Meh,當我寫我的評論時,我雖然「噢,有人會去挑剔我沒有提到'malloc'變種...... meh,可能不是這個事實。看起來我錯了。 –