malloc和calloc的區別

2021-08-21 08:13:46 字數 1315 閱讀 2243

函式malloc()和calloc()都可以用來動態分配記憶體空間。

1、malloc()函式有乙個引數,即要分配的記憶體空間的大小,

void *malloc(size_t size);

calloc()函式有兩個引數,分別為元素的數目和每個元素的大小,這兩個引數的乘積就是要分配的記憶體空間的大小,                  

void *calloc(size_t numelements,size_t sizeofelement);

如果呼叫成功,函式malloc()和函式calloc()都將返回所分配的記憶體空間的首位址。

2、函式malloc()不能初始化所分配的記憶體空間,函式calloc()能初始化所分配的記憶體空間。

如果由malloc()函式分配的記憶體空間原來沒有被使用過,則其中的每一位可能都是0;反之,如果這部分記憶體曾經被分配過,則其中可能遺留有各種各樣的資料。也就是說,使用malloc()函式

的程式開始時(記憶體空間還沒有被重新分配)能正常進行,但經過一段時間(記憶體空間還已經被重新分配)可能會出現問題。

函式calloc()會將所分配的記憶體空間中的每一位都初始化為零,也就是說,如果你是為字元型別或整數型別的元素分配記憶體,那麼這些元素將保證會被初始化為0;如果你是為指標型別的元素分配記憶體,那麼這些元素通常會被初始化為空指標;如果你為實型資料分配記憶體,則這些元素會被初始化為浮點型的零。void *malloc(size_t size);

calloc()函式有兩個引數,分別為元素的數目和每個元素的大小,這兩個引數的乘積就是要分配的記憶體空間的大小,                  

void *calloc(size_t numelements,size_t sizeofelement);

如果呼叫成功,函式malloc()和函式calloc()都將返回所分配的記憶體空間的首位址。

2、函式malloc()不能初始化所分配的記憶體空間,函式calloc()能初始化所分配的記憶體空間。

如果由malloc()函式分配的記憶體空間原來沒有被使用過,則其中的每一位可能都是0;反之,如果這部分記憶體曾經被分配過,則其中可能遺留有各種各樣的資料。也就是說,使用malloc()函式

的程式開始時(記憶體空間還沒有被重新分配)能正常進行,但經過一段時間(記憶體空間還已經被重新分配)可能會出現問題。

函式calloc()會將所分配的記憶體空間中的每一位都初始化為零,也就是說,如果你是為字元型別或整數型別的元素分配記憶體,那麼這些元素將保證會被初始化為0;如果你是為指標型別的元素分配記憶體,那麼這些元素通常會被初始化為空指標;如果你為實型資料分配記憶體,則這些元素會被初始化為浮點型的零。

malloc 和 calloc 的區別

void calloc size t num elements,size t element size void malloc size t size calloc和malloc都用於分配記憶體。1.malloc函式 malloc函式可以從堆上獲得指定位元組的記憶體空間,其函式宣告如下 void m...

malloc和calloc的區別

函式 malloc 和calloc 都可以用來動態分配記憶體空間 但兩者稍有區別。malloc 函式有乙個引數 即要分配的記憶體空間的大小 void malloc size t size calloc 函式有兩個引數 分別為元素的數目和每個元素的大小 這兩個引數的乘積就是要分配的記憶體空間的大小。v...

malloc 和calloc 的區別

malloc 和calloc 的區別 1 函式引數 函式malloc 和calloc 都可以用來動態分配記憶體空間,但兩者稍有區別。malloc 函式有乙個引數,即要分配的記憶體空間的大小 void malloc size t size calloc 函式有兩個引數,分別為元素的數目和每個元素的大小...