使用remalloc的注意事項(xiàng)有哪些-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)使用remalloc的注意事項(xiàng)有哪些,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元工農(nóng)做網(wǎng)站,已為上家服務(wù),為工農(nóng)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

原型:extern void *realloc(void *mem_address, unsigned int newsize);

用法:#include <malloc.h>

功能:改變mem_address所指內(nèi)存區(qū)域的大小為newsize長(zhǎng)度。

說明:如果重新分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL。當(dāng)內(nèi)存不再使用時(shí),應(yīng)使用free()函數(shù)將內(nèi)存塊釋放。

下面再看MSDN中對(duì)realloc()函數(shù)的描述:

realloc returns a void pointer to the reallocated (and possibly moved) memory block. The return value is NULL if the size is zero and the buffer argument is not NULL, or if there is not enough available memory to expand the block to the given size. In the first case, the original block is freed. In the second, the original block is unchanged. The return value points to a storage space that is guaranteed to be suitably aligned for storage of any type of object. To get a pointer to a type other than void, use a type cast on the return value.

這段E文基本上是在講realloc()的返回值的。realloc()函數(shù)的返回值是void *型的。

有下面三種情況:

1、返回void * 指針,調(diào)用成功。Void *型的指針指向新分配的內(nèi)存空間。在需要的情況下可以再對(duì)這個(gè)指針進(jìn)行強(qiáng)制類型轉(zhuǎn)換,轉(zhuǎn)換成你需要的類型的指針。如果傳入的第一個(gè)指針參數(shù)為NULL,則該函數(shù)等同與malloc函數(shù)。

2、返回NULL,當(dāng)需要擴(kuò)展的大?。ǖ诙€(gè)參數(shù))為0并且第一個(gè)參數(shù)不為NULL,此時(shí)原內(nèi)存被“freed”掉了。

我們知道,realloc是從堆上分配內(nèi)存的,當(dāng)擴(kuò)大一塊內(nèi)存空間時(shí), realloc()試圖直接從堆上現(xiàn)存的數(shù)據(jù)后面的那些字節(jié)中獲得附加的字節(jié),如果能夠滿足,自然天下太平;可如果數(shù)據(jù)后面的字節(jié)不夠的話,那么就使用堆上第一個(gè)有足夠大小的自由塊,現(xiàn)存的數(shù)據(jù)然后就被拷貝至新的位置,而老塊則放回到堆上。返回值指向新分配的內(nèi)存地址。

由于在這其中可能會(huì)發(fā)生數(shù)據(jù)的移動(dòng),因此我們應(yīng)該盡力避免下面的用法。

…………………………

#include <malloc.h>

char   *p,*q;

p = (char * ) malloc (10);

q=p;

p = (char * ) realloc (p,20);

…………………………

在這種情況下,如果發(fā)生了數(shù)據(jù)的移動(dòng),p指向了新分配的內(nèi)存地址,但是指針q還依然指向原先的內(nèi)存地址,而原先的那部分內(nèi)存已經(jīng)在realloc函數(shù)中free掉了,因此指針q成了“野指針”,指向了一塊未知的內(nèi)存區(qū)域,這是很危險(xiǎn)的。類似的,我們也應(yīng)該盡量避免下面這種情況的使用。

…………………………

q = (char * ) realloc (p,20);

………………………

與第一種情況類似,如果發(fā)生了數(shù)據(jù)的移動(dòng),q指向了新分配的內(nèi)存地址,而指針p還依然指向原先的內(nèi)存地址,此時(shí)p成了野指針。如果不得以非得這樣使用的話(估計(jì)這種情況是不存在的),我們也應(yīng)該緊跟此后將指針p置為NULL。

…………………………

q = (char * ) realloc (p,20);

p = NULL;

關(guān)于“使用remalloc的注意事項(xiàng)有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站bm7419.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章題目:使用remalloc的注意事項(xiàng)有哪些-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://bm7419.com/article22/hsjcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、標(biāo)簽優(yōu)化、域名注冊(cè)、微信公眾號(hào)、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)