2011-05-30 123 views
0

我剛剛寫了一個函數,它返回一個指向由malloc分配的內存塊的指針。如果我在返回的指針上調用free(),這會釋放內存嗎?傳遞malloc分配的空間指針

我試着讀到這一點,但我找不到任何說你是否可以調用指向同一位置的不同指針,以及是否會釋放所有內存。

這可能主要是基本的,我想我找不到信息,因爲我找錯了。

任何幫助表示讚賞!

回答

3

是的調用free將釋放內存。它不是被釋放的指針,而是指針指向的內存被釋放。

+0

謝謝!我猜測有多少內存被分配存儲在其他地方的信息,所以當'free'被調用時,它知道要釋放多少內存? – Russbear 2011-06-01 18:01:57

+0

是的,這是正確的。 – 2011-06-01 20:34:15

+0

@RichardSchneider如果我有一個函數,我使用malloc和一個指針分配一些內存,實際上我擴展了一個數組。現在,我必須使用return來傳遞相同的數組。現在,在我返回之前,我甚至無法釋放它。在這種情況下,我可以做什麼? – 2012-10-18 17:09:15

0

這不是完全清楚你問在這裏,但如果你問的是:

Can I call free() on a pointer which points to a location within the allocated block? 

那麼答案是「不」 - 你必須通過free()你得到了確切的指針從malloc()返回。嘗試free()內部指針或指向未由malloc()分配的內存的指針時,可能會發生內存損壞或崩潰。

+0

我想你誤會了OP的問題。 – 2011-05-31 00:12:11

1

您必須將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); 
+0

+1 *值*在這裏是關鍵,而OP似乎並不瞭解。 – 2011-05-31 00:12:42