void *malloc(int size);
說明:malloc向系統申請分配size位元組的記憶體空間,返回型別為void*型別。
int *p;
p = (int *)malloc( sizeof(int) );
注意:(1)因為malloc返回的是不確定型別的指標,所以返回之前必須經過型別強制轉換,否則編譯報錯,如:「 不能將void*賦值給int*變數 」。
(2)malloc只管分配記憶體,並不會初始化,其記憶體空間中的值可能是隨機的。如果分配的這塊空間原來沒有被使用過,那麼其中每個值都可能是0。相反,空間裡面可能遺留各種各樣的值。
(3)實參為需要分配的位元組大小,如果malloc(1),那麼系統只分配了1個位元組的記憶體空間,這時注意,如果在這塊空間中存放乙個int值,由於int型別佔4個位元組,那麼還有3個位元組未分配空間,系統就會在已經分配的那1個位元組的基礎上,依次向後分配3個位元組空間,而這就占有了「別人」的3個位元組空間,「別人」原有的值就被清空了。
(4)分配的空間不再使用時,要用free函式釋放這塊記憶體空間。
分配100個int型別的空間:
int *p;
p = (int *)malloc( sizeof(int) * 100 );
(1)malloc函式被呼叫時,它會沿空閒鍊錶尋找乙個可以滿足需求的記憶體塊,然後把所需大小的記憶體塊分配給使用者,剩下的返回到鍊錶上。free函式被呼叫時,它將釋放的記憶體塊連線到空閒鍊錶上。
(2)到最後,空閒鍊錶會被分成很多小的記憶體片段,當使用者申請一塊較大的記憶體空間時,空閒鍊錶上可能沒有滿足需求的記憶體塊了,這時,malloc函式請求延時,並將空閒鍊錶內的小記憶體片段整理成大的記憶體塊,最終返回。
malloc函式用法
1 函式宣告 void malloc int size 說明 malloc向系統申請分配size位元組的記憶體空間,返回型別為void 型別。2 使用 int p p int malloc sizeof int 注意 1 因為malloc返回的是不確定型別的指標,所以返回之前必須經過型別強制轉換,否...
malloc函式用法
原型 extern void malloc unsigned int num bytes 用法 i nclude 或 i nclude 功能 分配長度為num bytes位元組的記憶體塊 說明 如果分配成功則返回指向被分配記憶體的指標,否則返回空指標null。當記憶體不再使用時,應使用free 函式...
malloc函式及用法
動態儲存分配 在陣列一章中,曾介紹過陣列的長度是預先定義好的,在整個程式中固定不變。c語言中不允許動態陣列型別。例如 int n scanf d n int a n 用變數表示長度,想對陣列的大小作動態說明,這是錯誤的。但是在實際的程式設計中,往往會發生這種情況,即所需的記憶體空間取決於實際輸入的資...