古詩詞大全網 - 成語故事 - 二級C中malloc函數和calloc函數的區別

二級C中malloc函數和calloc函數的區別

函數malloc()和calloc()都可以用來動態分配內存空間,但兩者稍有區別。

malloc()函數有壹個參數,即要分配的內存空間的大小:

void

*malloc(size_t

size);

calloc()函數有兩個參數,分別為元素的數目和每個元素的大小,這兩個參數的乘積就是要分配的內存空間的大小。

void

*calloc(size_t

numElements,

size_t

sizeof

(Element));

如果調用成功,函數malloc()和函數calloc()都將返回所分配的內存空間的首地址。

函數malloc()和函數calloc()的主要區別是前者不能初始化所分配的內存空間,而後者能。

如果由malloc()函數分配的內存空間原來沒有被使用過,則其中的每壹位可能都是0;反之,如果這部分內存曾經被分配過,則其中可能遺留有各種各樣的數據。也就是說,使用malloc()函數的程序開始時(內存空間還沒有被重新分配)能正常進行,但經過壹段時間(內存空間還已經被重新分配)可能會出現問題。

函數calloc()會將所分配的內存空間中的每壹位都初始化為零,也就是說,如果妳是為字符類型或整數類型的元素分配內存,那麼這些元素將保證會被初始化為0;如果妳是為指針類型的元素分配內存,那麼這些元素通常會被初始化為空指針;如果妳為實型數據分配內存,則這些元素會被初始化為浮點型的零。