三個函數的申明分別是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
它們的傳回值都是請求系統分配的地址,如果請求失敗就返回NULL
malloc用於申請一段新的地址,參數size為需要記憶體空間的長度,如:
char* p;
p=(char*)malloc(20);
calloc與malloc相似,參數nelem為申請地址的單位元素長度,elsize為元素個數,如:
char* p;
p=(char*)calloc(sizeof(char),20);
這個例子與上一個效果相同
realloc是給一個已經分配了地址的指標重新分配空間,參數ptr為原有的空間地址,newsize是重新申請的地址長度
如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);
注意,這裡的空間長度都是以位元組為單位。
C語言的標準記憶體配置函數:malloc,calloc,realloc,free等。
malloc與calloc的區別為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函數。
一般調整容量的代碼,是malloc和realloc函數合用:
void re_capacity(size_t s){ if(!buf) buf = (t*)malloc(sizeof(t)*s); else buf = (*t)realloc(buf,sizeof(t)*s);}