2012-10-11 67 views
1

聲明看起來像這樣:爲什麼malloc和free有不同的返回類型?

void *malloc(size_t size); 
void free(void *pointer) 

至於我能理解,虛空* malloc的指的malloc返回一個指向void(「空指針」)和自由就是無效的。有什麼不同?它爲什麼這樣看?

+0

'malloc'分配一些東西並返回給你這個塊,'free'釋放塊並且......沒有其他東西。爲什麼它應該回報什麼? – akappa

+1

如果你認真思考,你期望什麼免費()返回?指向堆上的無效,釋放內存段的指針? – Lundin

+2

他顯然無法看到'void *'和'void'之間的區別 – Alexander

回答

3

void僅表示返回類型未定義(例如,不是指向char的指針),而是指定大小的連續內存塊。

free()不返回任何東西。它不需要。

2

void pointer是通用指針。這可以分配給任何類型的指針。所以malloc就是這樣設計的。

free()不會返回任何東西。只需從堆中的給定地址條目取消分配內存塊即可。

1

它們並不等同於對方。爲什麼比較?

malloc分配內存,所以它應該返回指向分配內存的指針。

free釋放內存,它不必返回任何值,所以它是無效的。

+0

我比較既然都返回void了。我不明白void和void之間的區別。謝謝你的答案。 –

+0

@NickRosencrantz:它不是「無效和指針」,它是「無效指針」(無類型指針)。 – cdarke

3

malloc將指針(void*)返回給分配的內存。 free釋放內存。它不返回任何東西(void)。

1

C的問題是,在這種情況下,它是弱類型的。你不能malloc一個整數,字符,雙精度或任何其他結構的數組 - 對於任何可能的類型(包括你自己的結構),必須有一個malloc/free對。所以不是返回指向某種類型的指針,而是指針具有void類型。這意味着,數據的類型是不確定的,並且您通常會將該指針轉換爲您需要的類型指針。

的malloc共同使用模式因此:

type *myMemory = (type *)malloc(x * sizeof(type)); 

其中Type是你要的malloc(INT,CHAR,結構...)和x的類型是 「實例」 的號碼,你想到malloc。

free方法只需要malloc的指針並將其釋放。遵循相同的邏輯,它不能接受一個int,char ...指針,所以它需要void指針。空指針與任何其他指針「兼容」。

+0

另一種常見用法是type * M = malloc(x * sizeof * M);這更好,因爲當你改變M的類型時,你不需要記住改變malloc的參數。 – dmuir

1

他們是完全不同的東西。它們看起來相似的事實只是使用的語法。

「void *」是一個指向內存塊的指針,它沒有任何與之關聯的特定類型。您可以將其轉換爲任何其他指針類型。

「void」(不含星號)表示函數根本不返回任何值。

1

malloc()是一個內存分配功能,其主要任務是通過分配的malloc return pointer to starting address of the memory block()。該問題是malloc()被設計成是通用的不是爲任何類型single如此,address return should not be for a specific type(例如g char,int),它應該是通用的,所以malloc()返回一個void指針,它給了程序員一個選項來將其轉換爲任何類型並使用該存儲器。所以它的返回類型是void *。

對於free(),它是一個內存釋放函數,它的主要工作是free the content of the memory address pointed by the argument,這也是爲通用設計的,它可以釋放任何內存類型而不僅僅是char,int等,所以它的參數類型是void *。

自由返回沒有任何意思,這是一個無效的指針或其他任何東西,所以它只是無效。

0

void*表示「任何類型指針」。指向那種類型在那個特定時刻沒有定義或不重要的記憶。

void沒有任何意義。沒有價值。

printf("malloc returned address %p\n", malloc(1));有效C,malloc返回一個指向包含未定義數據的內存塊的指針。

printf("free returned status %d\n",free(ptr));無效C因爲free實際上不返回任何內容。