malloc,calloc,realloc等記憶體分配函式區別

鴨脖發表於2013-01-03

三個函式的宣告分別是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
都在stdlib.h函式庫內

它們的返回值都是請求系統分配的地址,如果請求失敗就返回NULL

malloc用於申請一段新的地址,引數size為需要記憶體空間的長度,如:
char* p;
p=(char*)malloc(20);

callocmalloc相似,引數elsize 為申請地址的單位元素長度,nelem為元素個數,
如:
char* p;
p=(char*)calloc(20, sizeof(char));  
這個例子與上一個效果相同

realloc是給一個已經分配了地址的指標重新分配空間,引數ptr為原有的空間地址,newsize是重新申請的地址長度

如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);

注意,這裡的空間長度都是以位元組為單位。

 

C語言的標準記憶體分配函式:malloccallocrealloc等。
malloccalloc的區別為1塊與n塊的區別:
malloc呼叫形式為(型別*)malloc(size):在記憶體的動態儲存區中分配一塊長度為“size”位元組的連續區域,返回該區域的首地址。
calloc呼叫形式為(型別*)calloc(n,size):在記憶體的動態儲存區中分配n塊長度為“size”位元組的連續區域, 每一位都初始化為零,返回首地址。
realloc呼叫形式為(型別*)realloc(*ptr,size):將ptr記憶體大小增大到size。


free的呼叫形式為free(void*ptr):釋放ptr所指向的一塊記憶體空間。
C++中為new/delete函式。 

 轉載至http://blog.csdn.net/mobidogs/article/details/1552732

相關文章