關(guān)于c語言malloc和realloc,C語言中malloc()和calloc()有什么區(qū)別這個(gè)問題很多朋友還不知道,今天小六來為大家解答以上的問題,現(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)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一塊長(zhǎng)度為"size"字節(jié)的連續(xù)區(qū)域,返回該區(qū)域的首地址。
3、 calloc調(diào)用形式為(類型*)calloc(n,size):在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配n塊長(zhǎng)度為"size"字節(jié)的連續(xù)區(qū)域,返回首地址。
4、 realloc 不能保證重新分配后的內(nè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ù)說明:alloca()用來配置size個(gè)字節(jié)的內(nèi)存空間,然而和malloc/ calloc不同的時(shí), alloca()是從堆??臻g(stack)中配置內(nèi)存,因此在函數(shù)返回時(shí)會(huì)自動(dòng)釋放此空間返回值 :若配置成功則返回一指針, 失敗則返回NULL。
本文分享完畢,希望對(duì)大家有所幫助。
標(biāo)簽:
免責(zé)聲明:本文由用戶上傳,與本網(wǎng)站立場(chǎng)無關(guān)。財(cái)經(jīng)信息僅供讀者參考,并不構(gòu)成投資建議。投資者據(jù)此操作,風(fēng)險(xiǎn)自擔(dān)。 如有侵權(quán)請(qǐng)聯(lián)系刪除!