我有一個內存分配問題。如果我在else
塊中聲明char*
,這意味着else
塊完成執行時char*
被銷燬。 else
塊位於while
循環中,因此它將迭代多次。但是,如果在else
塊中聲明的char*
變爲別名爲malloc'd
變量,如下例所示:我的問題是,我如何收費?我覺得如果我釋放臨時變量char*
,我將導致分段錯誤,因爲我將釋放我想保留的變量。如果是這樣的話,那麼我就不知道free
聲明的用處。內存分配C
char* print_path = NULL;
(SNIP)
(while)
else{
char* temp_path = print_path;
int temp_size = strlen(temp_path)+strlen(file_name(child->fts_path))+1;
print_path = (char*)malloc(temp_size);
strcpy(print_path, temp_path);
strncat(print_path, file_name(child->fts_path), strlen(file_name(child->fts_path)));
printf("%s:\n\n", print_path);
}
(中略)
我想指出的是,我做免費print_path在節目結束後,我知道它不會被再次執行。然而,這是我想要釋放的循環的中間執行。任何幫助,將不勝感激。 謝謝!
你混淆了堆棧分配和堆分配的東西。你沒有釋放指針,你釋放了指針指向的內存。 –
在循環的每次迭代中釋放點有什麼意義?你知道在循環期間你將需要這段內存,釋放和重新分配在這裏沒有多大意義。 –
@JordanKaye在每次迭代期間釋放的一點是因爲之前迭代的動態分配變量不再需要。如果這是通過足夠長的數據採樣運行的,則不會留下任何內存。當不再需要時,釋放所有malloc'd變量也是很好的編程實踐。 – tpar44