C語言 malloc 與 calloc的區別

2021-06-29 16:23:28 字數 1177 閱讀 7057

用malloc和calloc分別實現同乙個功能。

如下:

#include

#include

void main()

check(p1);

return0;}

void check(int *p)

}printf("\n");

}

#include

#include

void main()

check(p1);

return0;}

void check(int *p)

}printf("\n");

}

上面兩段不同的** 基本上只有一行的差異

但是它們完成了相同的功能 動態的分配了一段空間。

記憶體空間,但兩者稍有區別。

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

void *malloc(unsigned int size);

calloc()函式有兩個引數,分別為元素的數目和每個元素的大小

這兩個引數的乘積就是要分配的記憶體空間的大小。

void *calloc(unsigned n,unsigned size);

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

函式malloc()和函式calloc()的主要區別是前者不能初始化所分配的記憶體空間,

而後者能。如果由malloc()函式分配的記憶體空間原來沒有被使用過,

則其中的每一位可能都是0;反之,如果這部分記憶體曾經被分配過,則其中可能遺留有各種各

樣的資料。也就是說,使用malloc()函式的程式開始時(記憶體空間還沒有被重新分配)能

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

函式calloc()會將所分配的記憶體空間中的每一位都初始化為零,也就是說,

如果你是為字元型別或整數型別的元素分配記憶體,那麼這些元素將保證會被初始化為0;

如果你是為指標型別的元素分配記憶體,那麼這些元素通常會被初始化為空指標;如果你為

實型資料分配記憶體,則這些元素會被初始化為浮點型的零。

C語言 malloc 函式與alloc 函式

c語言跟記憶體分配方式 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集...

C語言malloc函式

malloc 標頭檔案 include 原型 void malloc size t size 引數說明 size為需要分配的記憶體空間大小,單位是byte 函式說明 在堆區分配一塊size byte大小的記憶體空間,用於存放資料,這塊記憶體空間被分配後不會被初始化,因此這些記憶體空間對應的值是未知的...

C語言中的malloc與free函式

malloc函式的作用是在堆中開闢一塊指定大小的空間。如果開闢成功,返回空間首個位元組位址,失敗則返回null。free函式能夠釋放在堆中開闢的記憶體空間,傳入乙個任意型別的指標變數,指向指向被釋放區域的首位址。被釋放區域應是有malloc開闢的空間。需要注意的是 free釋放記憶體空間只是失去了對...