函式
malloc()
和calloc()
都可以用來動態分配記憶體空間
,但兩者稍有區別。
malloc()
函式有乙個引數
,即要分配的記憶體空間的大小:
void*malloc(size_t size);
calloc()
函式有兩個引數
,分別為元素的數目和每個元素的大小
,這兩個引數的乘積就是要分配的記憶體空間的大小。
void*calloc(size_t numelements,size_t sizeofelement);
如果呼叫成功,函式
malloc()
和函式calloc()
都將返回所分配的記憶體空間的首位址。
函式malloc()
和函式calloc()
的主要區別是前者不能初始化所分配的記憶體空間
,而後者能。
如果由malloc()
函式分配的記憶體空間原來沒有被使用過,則其中的每一位可能都是
0;反之
,如果這部分記憶體曾經被分配過
,則其中可能遺留有各種各樣的資料。也就是說,使用
malloc()
函式的程式開始時
(記憶體空間還沒有被重新分配
)能正常進行
,但經過一段時間
(記憶體空間還已經被重新分配
)可能會出現問題。
函式calloc()
會將所分配的記憶體空間中的每一位都初始化為零
,也就是說
,如果你是為字元型別或整數型別的元素分配記憶體
,那麼這些元素將保證會被初始化為
0;如果你是為指標型別的元素分配記憶體
,那麼這些元素通常會被初始化為空指標
;如果你為實型資料分配記憶體
,則這些元素會被初始化為浮點型的零。
需要包含標頭檔案:
#include
#include
函式宣告
(函式原型):
void*malloc(int size);
說明:malloc
向系統申請分配指定
size
個位元組的記憶體空間。返回型別是
void*
型別。void*
表示未確定型別的指標。
c,c++
規定,void*
型別可以強制轉換為任何其它型別的指標。從函式宣告上可以看出。
malloc
和new
至少有兩個不同
:new
返回指定型別的指標,並且可以自動計算所需要大小。比如:
int*p;
p= new int; //
返回型別為
int*型別(
整數型指標
),分配大小為
sizeof(int); 或:
int*parr;
parr= new int [100]; //
返回型別為
int*型別(
整數型指標
),分配大小為
sizeof(int)* 100; 而
malloc
則必須由我們計算要位元組數,並且在返回後強行轉換為實際型別的指標。
int*p;
p= (int *) malloc (sizeof(int));
第一、malloc
函式返回的是
void*
型別,如果你寫成:
p= malloc (sizeof(int));
則程式無法通過編譯,報錯:「不能將
void*
賦值給int*
型別變數」。所以必須通過
(int*)
來將強制轉換。
第二、函式的實參為
sizeof(int)
,用於指明乙個整型資料需要的大小。如果你寫成:
int*p = (int *) malloc (1);
**也能通過編譯,但事實上只分配了
1個位元組大小的記憶體空間,當你往裡頭存入乙個整數,就會有
3個位元組無家可歸,而直接「住進鄰居家」!造成的結果是後面的記憶體中原有資料內容
全部被清空。
malloc
也可以達到
new
的效果,申請出一段連續的記憶體,方法無非是指定你所需要記憶體大小。
比如想分配
100個
int型別的空間:
int*p = (int *) malloc ( sizeof(int) * 100 ); //
分配可以放得下
100個整數的記憶體空間。
另外有一點不能直接看出的區別是,
malloc
只管分配記憶體,並不能對所得的記憶體進行初始化,所以得到的一片新記憶體中,其值將是隨機的。
除了分配及最後釋放的方法不一樣以外,通過
malloc
或new
得到指標,在其它操作上保持一致
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 的區別 1 函式引數 函式malloc 和calloc 都可以用來動態分配記憶體空間,但兩者稍有區別。malloc 函式有乙個引數,即要分配的記憶體空間的大小 void malloc size t size calloc 函式有兩個引數,分別為元素的數目和每個元素的大小...
malloc和calloc的區別
函式malloc 和calloc 都可以用來動態分配記憶體空間,但兩者稍有區別。malloc 函式有乙個引數,即要分配的記憶體空間的大小 void malloc size t size calloc 函式有兩個引數,分別為元素的數目和每個元素的大小,這兩個引數的乘積就是要分配的記憶體空間的大小。vo...