2012-11-08 52 views
5

可能重複:
Do I cast the result of malloc?是有必要類型轉換malloc和釋放calloc

我google搜索,找出的malloc釋放calloc的類型轉換的原因。但是,我只發現的類型鑄造malloc沒有必要,因爲它返回void指針但是,calloc。這與calloc也是一樣的原因?

現在,如果我們搬回到第一點,關於的malloc釋放calloc的返回值。然後,我發現,都返回分配空間。所以,我在這裏有點困惑。所以,我的問題是

  1. 什麼是的malloc釋放calloc

  2. 的返回值是有必要類型轉換的malloc釋放calloc。爲什麼?

+0

@hmjd可能是......但我在這裏同時要求'malloc'和'calloc'。 – Ravi

+0

是的,這是重複的,但是編譯器在要求您將void指針轉換爲任何其他類型時會變得更加狡猾 - 這是針對void指針的原始目的飛行的,這是一種通用類型,可以是施放並分配給任何東西。這是更「C」的進步。 – user2548100

回答

7

malloc和calloc的返回值是什麼?

它是指向voidvoid*)的指針。

是否需要鍵入malloc和calloc。爲什麼?

不,因爲從指針到void到指向對象的指針的轉換是隱式的。

C11(n1570),§6.3.2.3指針
一個指向void可轉化爲或者從一個指針到任何對象類型。

這對malloccalloc都是正確的。可分配給任何指針類型。在C中,它沒有必要類型轉換void*,因爲它是由compiler.But在C隱式進行

+1

+1供參考 – CCoder

1

什麼是malloc()和釋放calloc()的返回值?

void *malloc(size_t size); 
void *calloc(size_t nmemb, size_t size); 

void*由兩者的功能返回。

是否需要鍵入malloc和calloc。爲什麼?

不需要強制轉換。 malloc()calloc()函數返回一個指針,指向爲任何類型的變量適當對齊的已分配內存。出錯時,這些函數返回NULLNULL也可以通過成功調用malloc()(大小爲零)或成功調用calloc()nmemb或大小等於零)來返回。

2

malloc()calloc()回報void * ++,它會給你的錯誤,如果你不強制轉換

1

返回值malloccallocvoid*。這些函數分配的堆內存空間的地址。

這兩個函數都分配內存。它們之間的唯一區別是

  • malloc只是分配內存。
  • 釋放calloc分配內存並將其初始化爲0。

在C其不推薦投這些函數的返回值。

在C++中,它是強制轉換。