【from msdn && 百科】
原型:void *malloc(unsigned int size);
#include或#include
malloc的全稱是memory allocation,中文叫動態記憶體分配,當無法知道記憶體具體位置的時候,想要繫結真正的記憶體空間,就需要用到動態的分配記憶體。
malloc 向系統申請分配指定size個位元組的記憶體空間(連續的一塊記憶體)。返回型別是 void* 型別。void* 表示未確定型別的
指標
。
void *可以指向任何型別的資料,更明確的說是指申請記憶體空間時還不知道使用者是用這段空間來儲存什麼型別的資料,c,c++規定,void* 型別可以強制轉換
為任何其它型別的
指標。
allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
如果分配成功則返回指向被分配記憶體的指標
(此儲存區中的初始值不確定),否則返回空指標null。當記憶體不再使用時,應使用free
()函式將記憶體塊釋放。函式返回的
指標一定要適當對齊,使其可以用於任何資料物件。
比如想分配100個int型別的空間:int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個整數的記憶體空間。
malloc 只管分配記憶體,並不能對所得的記憶體進行初始化,所以得到的一片新記憶體中,其值將是隨機的。
申請零位元組記憶體,函式並不返回null,而是返回乙個正常的記憶體位址,但是你卻無法使用這塊大小為0的記憶體。
demo:
[cpp]view plain
copy
#include
#include
intmain(
void
)
for(n=0;n
buffer[i]='\0'
; printf("random string :%s\n"
,buffer);
free(buffer);
getch();
return
0;
}
malloc 和 new 至少有兩個不同:new 返回指定型別的
指標,並且可以自動計算所需要大小。而 malloc 則必須要由我們計算位元組數,並且在返回後強行轉換為實際型別的指標。
double *pd=(double *) malloc (sizeof(double)*12);//分配12個double型儲存單元,並將首位址儲存到指標變數pd中
malloc函式的實質體現在,它有乙個將可用的記憶體塊連線為乙個長長的列表的所謂空閒鍊錶。呼叫malloc函式時,它沿連線表尋找乙個大到足以滿足使用者請求所需要的記憶體塊。然後,將該記憶體塊一分為二(一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組)。接下來,將分配給使用者的那塊記憶體傳給使用者,並將剩下的那塊(如果有的話)返回到連線表上。呼叫free函式時,它將使用者釋放的記憶體塊連線到空閒鏈上。到最後,空閒鏈會被切成很多的小記憶體片段,如果這時使用者申請乙個大的記憶體片段,那麼空閒鏈上可能沒有可以滿足使用者要求的片段了。於是,malloc函式請求延時,並開始在空閒鏈上翻箱倒櫃地檢查各記憶體片段,對它們進行整理,將相鄰的小空閒塊合併成較大的記憶體塊。如果無法獲得符合要求的記憶體塊,malloc函式會返回null指標,因此在呼叫malloc動態申請記憶體塊時,一定要進行返回值的判斷。
demo:
[cpp]view plain
copy
#include
#include
intmain(
void
)
else
getch();
return
0;
}
C語言之malloc函式
from msdn 百科 原型 void malloc unsigned int size include或 include malloc的全稱是memory allocation,中文叫動態記憶體 分配,當無法知道記憶體具體位置的時候,想要繫結真正的記憶體空間,就需要用到動態的分配記憶體。mall...
C語言malloc函式
malloc 標頭檔案 include 原型 void malloc size t size 引數說明 size為需要分配的記憶體空間大小,單位是byte 函式說明 在堆區分配一塊size byte大小的記憶體空間,用於存放資料,這塊記憶體空間被分配後不會被初始化,因此這些記憶體空間對應的值是未知的...
C語言之malloc用法,C語言動態開闢記憶體
c 庫函式 voidmalloc size t size 分配所需的記憶體空間,並返回乙個指向它的指標 所以需要乙個指標來接收使用這個開闢的記憶體空間,size 記憶體塊的大小,以 位元組 為單位。如果請求失敗,則返回null。使用完malloc 需要配合free 函式釋放申請的記憶體空間,不造成記...