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