天天看點

C語言中malloc,calloc,realloc三個函數的差別

這三個函數的聲明分别是:
 
  
 
 void* realloc(void* ptr, unsigned newsize);
 
 void* malloc(unsigned size);
 
 void* calloc(size_t numElements, size_t sizeOfElement);
 

 都包含在include
 傳回值:如果配置設定成功,傳回配置設定的首位址,否則傳回空(NULL)
malloc用于配置設定一段新位址,函數的參數為配置設定空間的大小:
 char* p;
 p=(char*)malloc(20);意思是配置設定20個位元組大小的空間,首位址是P
 calloc與malloc相似,配置設定的空間是按照塊的,參數sizeOfElement為申請位址的機關元素長度,numElements為元素個數,如:
 char* p;
 p=(char*)calloc(20,sizeof(char));
 這個例子與上一個效果相同,但意義不同,代表配置設定20塊大小為1的空間,首位址為p; realloc是給一個已經配置設定了位址的指針重新配置設定空間,參數ptr為原有的空間位址,newsize是重新申請的位址長度
 如:
 char* p;
 p=(char*)malloc(sizeof(char)*20);
 p=(char*)realloc(p,sizeof(char)*40);意思是将指針p配置設定的空間由20位元組變為40位元組
 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所指向的一塊記憶體空間。      

繼續閱讀