說我有一個指針數組包含字符串每所以對於這樣的結構:C - 釋放指針數組是否也釋放它們指向的內容?
printf("%s\n", array[0]);
輸出是:
Hello.
如果我執行free(array)
將這種自由是什麼array[0]
是指向? ("Hello."
)。
我花了幾個小時試圖手動釋放每個元素,我得到的所有是崩潰。我希望這是一個快捷方式:/
說我有一個指針數組包含字符串每所以對於這樣的結構:C - 釋放指針數組是否也釋放它們指向的內容?
printf("%s\n", array[0]);
輸出是:
Hello.
如果我執行free(array)
將這種自由是什麼array[0]
是指向? ("Hello."
)。
我花了幾個小時試圖手動釋放每個元素,我得到的所有是崩潰。我希望這是一個快捷方式:/
這一切都取決於如何分配數組。我給的例子:
實施例1:
char array[10];
free(array); // nope!
實施例2:
char *array;
array= malloc(10); // request heap for memory
free(array); // return to Heap when no longer needed
實施例3:
char **array;
array= malloc(10*sizeof(char *));
for (int i=0; i<10; i++) {
array[i]= malloc(10);
}
free(array); // nope. You should do:
for (int i=0; i<10; i++) {
free(array[i]);
}
free(array);
廣告。示例1:數組在堆棧上分配(「自動變量」),不能通過free
發佈。
Ad。示例2:使用malloc
從堆請求存儲。不再需要時,使用free
將其返回堆。
Ad。例3:你聲明瞭一個指向字符的指針數組。首先爲陣列分配存儲空間,然後爲每個數組元素分配存儲空間以放置字符串。不再需要時,必須首先釋放字符串(使用free
),然後釋放陣列本身(使用free
)。
如果我執行一個免費的(數組)將這個免費什麼array [0]指向 ? (「你好。」)。
不,他們不會自動釋放,但取決於您如何分配每個人,可能沒有必要實際釋放它們。如果指向由malloc
和類似分配函數返回的內存,則只需要釋放它們即可。
假設你有一個指針數組,字符串array
char * array[2];
array[0] = "Some text"; // You would not need to free this
array[1] = malloc(LENGTH); // This one you would have to free
注意在這種情況下,你不需要釋放array
本身。只有索引爲1的元素。
你只需要免費手動使用malloc()
。所以不行,根據指針它可能不會,甚至可能沒有必要。
答案是否定的。你需要'釋放'你的'malloc'。 –
'calloc'在崩潰中起作用嗎?我沒有使用'malloc',只有'calloc'。 – Laefica
至於你的崩潰,首先在調試器中運行以捕獲它們,並嘗試瞭解它們在代碼中發生的位置,然後嘗試找出它們發生的原因。如果你仍然無法弄清楚,那麼回到這裏並且詢問一個關於它的(新的)問題(並且包括一個[最小,完整和可驗證示例](http://stackoverflow.com/help/) mcve),其中包括指出發生崩潰的位置)。 –