malloc & calloc

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;如果你是爲指 針類型的元素分配內存,那麼這些元素通常會被初始化爲空指針;如果你爲實型數據分配內存,則這些元素會被初始化爲浮點型的零。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章