2016-08-22 103 views
3

感謝您的注意我的問題。使用malloc()和免費()

在C底漆此外,它首先寫入

free()的參數應該是一個指針,指向由malloc()分配的存儲器的塊;你不能用free()被其他分配的內存意味着

這意味着ONE malloc(),ONE和ONLY一個free()

但後來它去

沒關係使用不同的指針變量與free()malloc();必須同意的是存儲在指針中的地址。

這似乎與第一個陳述相矛盾。

所以我的理解是,只要一對malloc()free()共享相同的地址沒有錯誤,指針的名稱並不重要。我對嗎?

+0

指針「的說法給free()** **應該是一個......」是錯誤的。它**應**。而指針不是它指向**的對象! – Olaf

回答

13

例如:

void* p = malloc (100); 
void* q = p; 
free (q); 

...很好。 free()的參數是由malloc返回的值。這句話

「沒關係比 的malloc()使用不同的指針變量有免費()」

實際上是毫無意義的,只是造成混亂 - 當然這是很好用不同只要值是相同的變量。

+0

謝謝,這本書好像有很多這樣的多餘描述 – Newb

2

變量包含一些值,可能是指針(即內存地址)。

兩個變量可能包含相同的指針(即,相同的地址),它被稱爲指針別名。

什麼事項free是讓以前malloc給出一個指針的(即以前malloc給出一個內存地址)

5

只要記住,釋放任何別名,使所有無效

int *a, *b, *c, *d, *e; 
a = malloc(42 * sizeof (int)); 
b = a; 
c = b; 
d = c; 
e = d; 
a[0] = 42; 
b[1] = 100; // same as a[1] 
c[2] = 999; // same as a[2] 
d[3] = -1; // same as a[3] 
e[4] = 0; // same as a[4] 
free(d); // for example 
// all of a, b, c, d, and e are now invalid; 
+0

這帶來了一些新的東西,thx。 – Newb