函式malloc 和calloc 的區別

2022-11-24 19:23:17 字數 1012 閱讀 4311

malloc()

函式更好還是用calloc()

函式更好

函式malloc()

和calloc()

都可以用來動態分配記憶體空間

,但兩者稍有區別。

malloc()

函式有一個引數

,即要分配的記憶體空間的大小

:void*malloc(size_tsize);

calloc()

函式有兩個引數

,分別為元素的數目和每個元素的大小

,這兩個引數的乘積就是要分配的記憶體空間的大小。

void*calloc(size_tnumelements,size_tsizeofelement);

如果呼叫成功,函式

malloc()

和函式calloc()

都將返回所分配的記憶體空間的首地址。

函式malloc()

和函式calloc()

的主要區別是前者不能初始化所分配的記憶體空間

,而後者能。如果由

malloc()

函式分配的記憶體空間原來沒有被使用過,則其中的每一位可能都是

0;反之

, 如果這部分記憶體曾經被分配過

,則其中可能遺留有各種各樣的資料。也就是說,使用

malloc()

函式的程式開始時

(記憶體空間還沒有被重新分配

)能正常進行,

但經過一段時間

(記憶體空間還已經被重新分配

)可能會出現問題。

函式calloc()

會將所分配的記憶體空間中的每一位都初始化為零

,也就是說

,如果你是為字元型別或整數型別的元素分配記憶體

,那麼這些元素將保證會被初始化為

0;如果你是為指

針型別的元素分配記憶體

,那麼這些元素通常會被初始化為空指標

;如果你為實型資料分配記憶體

,則這些元素會被初始化為浮點型的零。

malloc calloc new的區別

這幾個都是動態申請空間用到的關鍵字。malloc和calloc的區別 calloc在動態分配完記憶體後,自動初始化該記憶體空間為零,而malloc不做初始化,分配到的空間中的資料是隨機資料。其中malloc的簡介如下 calloc的用法 void calloc size t nmenb,size t...

new和malloc的區別

一 new是操作符,而malloc是函式 void malloc size t void free void void operator new size t void operator delete void void operator new size t void operator delet...

new delete和malloc free的區別

區別 1.new delete是c 裡才有的,而new delete與malloc free一個顯著的區別在於,new是建造一個物件,並呼叫物件的建構函式來初始化物件,其實在所有的new操作過程中,總是分為兩步的 第一步是申請記憶體,第二步則是呼叫建構函式初始化物件。同樣,在呼叫delete的時候,...