關(guān)于c語言malloc和realloc,C語言中malloc()和calloc()有什么區(qū)別這個問題很多朋友還不知道,今天小六來為大家解答以上的問題,現(xiàn)在讓我們一起來看看吧!
1、函數(shù)原型:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_t nelem, size_t elsize);函數(shù)聲明都在stdlib.h函數(shù)庫內(nèi)。
2、 malloc調(diào)用形式為(類型*)malloc(size):在內(nèi)存的動態(tài)存儲區(qū)中分配一塊長度為"size"字節(jié)的連續(xù)區(qū)域,返回該區(qū)域的首地址。
3、 calloc調(diào)用形式為(類型*)calloc(n,size):在內(nèi)存的動態(tài)存儲區(qū)中分配n塊長度為"size"字節(jié)的連續(xù)區(qū)域,返回首地址。
4、 realloc 不能保證重新分配后的內(nèi)存空間和原來的內(nèi)存空間指在同一內(nèi)存地址, 它返回的指針很可能指向一個新的地址。
5、所以,在代碼中,必須把realloc返回的值,重新賦給 p 如:p = (char *) realloc (p, old_size + new_size);甚至可以傳一個空指針(0)給 realloc ,則此時realloc 作用完全相當(dāng)于malloc。
6、如:int* p = (char *) realloc (0,old_size + new_size); //全新分配一個內(nèi)存空間,作用完全等同于以下這行: int* p = (char *) malloc(old_size + new_size);calloc(len, size)與malloc相似,參數(shù)len為申請地址的單位元素長度,size為元素個數(shù),如:char* p;p=(char*)calloc(sizeof(char),1000); 另外:void *alloca(size_t size)函數(shù)說明:alloca()用來配置size個字節(jié)的內(nèi)存空間,然而和malloc/ calloc不同的時, alloca()是從堆??臻g(stack)中配置內(nèi)存,因此在函數(shù)返回時會自動釋放此空間返回值 :若配置成功則返回一指針, 失敗則返回NULL。
本文分享完畢,希望對大家有所幫助。
標(biāo)簽:
免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請聯(lián)系刪除!