我剛剛寫了一個函數,它返回一個指向由malloc分配的內存塊的指針。如果我在返回的指針上調用free(),這會釋放內存嗎?傳遞malloc分配的空間指針
我試着讀到這一點,但我找不到任何說你是否可以調用指向同一位置的不同指針,以及是否會釋放所有內存。
這可能主要是基本的,我想我找不到信息,因爲我找錯了。
任何幫助表示讚賞!
我剛剛寫了一個函數,它返回一個指向由malloc分配的內存塊的指針。如果我在返回的指針上調用free(),這會釋放內存嗎?傳遞malloc分配的空間指針
我試着讀到這一點,但我找不到任何說你是否可以調用指向同一位置的不同指針,以及是否會釋放所有內存。
這可能主要是基本的,我想我找不到信息,因爲我找錯了。
任何幫助表示讚賞!
是的調用free
將釋放內存。它不是被釋放的指針,而是指針指向的內存被釋放。
這不是完全清楚你問在這裏,但如果你問的是:
Can I call free() on a pointer which points to a location within the allocated block?
那麼答案是「不」 - 你必須通過free()
你得到了確切的指針從malloc()
返回。嘗試free()
內部指針或指向未由malloc()
分配的內存的指針時,可能會發生內存損壞或崩潰。
我想你誤會了OP的問題。 – 2011-05-31 00:12:11
您必須將free()
的值從malloc()
獲得。
int *x = malloc(42 * sizeof *x);
int *p = &x[0];
free(p); /* ok, same as free x; x and p have the same value */
編輯:另一個例子
int *x = malloc(42 * sizeof *x);
for (k = 0; k < 24; k++) *x++ = 0; /* zero first 24 elements */
free(x - 24);
+1 *值*在這裏是關鍵,而OP似乎並不瞭解。 – 2011-05-31 00:12:42
謝謝!我猜測有多少內存被分配存儲在其他地方的信息,所以當'free'被調用時,它知道要釋放多少內存? – Russbear 2011-06-01 18:01:57
是的,這是正確的。 – 2011-06-01 20:34:15
@RichardSchneider如果我有一個函數,我使用malloc和一個指針分配一些內存,實際上我擴展了一個數組。現在,我必須使用return來傳遞相同的數組。現在,在我返回之前,我甚至無法釋放它。在這種情況下,我可以做什麼? – 2012-10-18 17:09:15