三個(gè)函數(shù)的申明分別是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
都在stdlib.h函數(shù)庫(kù)內(nèi)
它們的返回值都是請(qǐng)求系統(tǒng)分配的地址,如果請(qǐng)求失敗就返回NULL
malloc用于申請(qǐng)一段新的地址,參數(shù)size為需要內(nèi)存空間的長(zhǎng)度,如:
char* p;
p=(char*)malloc(20);
calloc與malloc相似,參數(shù)nelem為申請(qǐng)地址的單位元素長(zhǎng)度,elsize為元素個(gè)數(shù),如:
char* p;
p=(char*)calloc(sizeof(char),20);
這個(gè)例子與上一個(gè)效果相同
realloc是給一個(gè)已經(jīng)分配了地址的指針重新分配空間,參數(shù)ptr為原有的空間地址,newsize是重新申請(qǐng)的地址長(zhǎng)度
如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);
注意,這里的空間長(zhǎng)度都是以字節(jié)為單位。
C語(yǔ)言的標(biāo)準(zhǔn)內(nèi)存分配函數(shù):malloc,calloc,realloc,free等。
malloc與calloc的區(qū)別為1塊與n塊的區(qū)別:
malloc調(diào)用形式為(類型*)malloc(size):在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一塊長(zhǎng)度為“size”字節(jié)的連續(xù)區(qū)域,返回該區(qū)域的首地址。
calloc調(diào)用形式為(類型*)calloc(n,size):在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配n塊長(zhǎng)度為“size”字節(jié)的連續(xù)區(qū)域,返回首地址。
realloc調(diào)用形式為(類型*)realloc(*ptr,size):將ptr內(nèi)存大小增大到size。
free的調(diào)用形式為free(void*ptr):釋放ptr所指向的一塊內(nèi)存空間。
C++中為new/delete函數(shù)。