對malloc rolloc calloc的用法以及區別

在防止野指針時候 我們有用到過malloc來給指針分配空間 下面瞭解m r c的用法以及區別

  z轉載出處:http://blog.csdn.net/wjy2016/article/details/51944926

malloc()用法

需要包含頭文件:#include<stdlib.h>

函數聲明:void *malloc(unsigned size);

說明:malloc 向系統申請分配指定size個字節的內存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C,C++規定,void* 類型可以強制轉換爲任何其它類型的指針。

注意事項:

第一、malloc 函數返回的是 void * 類型,如果你寫成:p = malloc (sizeof(int)); 則程序無法通過編譯,報錯:“不能將 void* 賦值給 int * 類型變量”。所以必須通過 (int *) 來將強制轉換。

第二、函數的實參爲 sizeof(int) ,用於指明一個整型數據需要的大小。如果你寫成: 

int* p = (int *) malloc (1);

代碼也能通過編譯,但事實上只分配了1個字節大小的內存空間,當你往裏頭存入一個整數,就會有3個字節無家可歸,而直接“住進鄰居家”!造成的結果是後面的內存中原有數據內容全部被清空。

第三,malloc()只管分配內存,並不進行初始化,所以你得到的內存空間裏的值可能是隨機的。



calloc()用法:

需要包含頭文件:#include<stdlib.h>

函數聲明:void *realloc(void *ptr,unsigned newsize);

說明:有兩個參數,分別爲元素的數目和每個元素的大小,這兩個參數的乘積就是要分配的內存空間的大小。如果調用成功,函數calloc()都將返回所分配的內存空間的首地址。 

注意事項:
    函數calloc()會將所分配的內存空間中的每一位都初始化爲零,也就是說,如果你是爲字符類型或整數類型的元素分配內存,那麼這些元素將保證會被初始化爲0;如果你是爲指針類型的元素分配內存,那麼這些元素通常會被初始化爲空指針;如果你爲實型數據分配內存,則這些元素會被初始化爲浮點型的零。 
ralloc()用法:
需要包含頭文件:#include<stdlib.h>
函數聲明:void *realloc(void *ptr, unsigned int newsize);
說明:realloc()是給一個已經分配了地址的指針重新分配空間,參數ptr爲原有的空間地址,newsize是重新申請的地址空間 。
注意事項
  ralloc()函數分配的空間是未初始化的。








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