位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C語(yǔ)言 > 問(wèn)題詳情

C語(yǔ)言 realloc()函數(shù)

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-03

realloc()函數(shù)的原型如下:

    void  *rea11oc(void  *ptr, size_t size);

使用該函數(shù)要包含頭文件stdlib.h,其功能是改變ptr指針指向的空間大小,為size大小。size大小可以是任意的,也就是說(shuō)既可以比原來(lái)的數(shù)值大,也可以比原來(lái)的數(shù)值小。返回值是一個(gè)指向新地址的指針,如果出現(xiàn)錯(cuò)誤,則返回NULL。例如,改變一個(gè)分配的實(shí)型空間大小成為整型大?。?/p>

    fDouble=(double*)malloc(sizeof(double)); 

    ilnt=realloc(fDouble, sizeof(int));

其中,fDouble是指向分配的實(shí)型空間,之后使用realloc()函數(shù)改變fDouble指向的空間的大小,其大小設(shè)置為整型,然后將改變后的內(nèi)存空間的地址返回賦值給ilnt整型指針。

【例題】記錄內(nèi)存地址

程序如下:

#include<malloc.h>

voidmain()

{

    char*p, *q; 

    p=(char*)malloc(10);

    q=p;

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

    //A行,通過(guò)realloc擴(kuò)大p的空間,并把新的地址賦值給p

    //………………

}

    在這段程序中我們?cè)黾恿酥羔榪,用它記錄原來(lái)的內(nèi)存地址p。這段程序可以編譯通過(guò),但在執(zhí)行到A行時(shí),如果原有內(nèi)存后面沒(méi)有足夠空間將原有空間擴(kuò)展成一個(gè)連續(xù)的新大小的話,realloc()函數(shù)就會(huì)以第二種方式分配內(nèi)存。此時(shí)數(shù)據(jù)發(fā)生了移動(dòng),那么所記錄的原來(lái)的內(nèi)存地址q所指向的內(nèi)存空間實(shí)際上已經(jīng)放回到堆上了。這樣就會(huì)產(chǎn)生q指針的指針懸掛,即指針指向了一塊沒(méi)有分配給用戶使用的內(nèi)存,如 果再用q指針進(jìn)行操作就可能發(fā)生意想不到的問(wèn)題。所以在應(yīng)用reallocO函數(shù)時(shí)應(yīng)當(dāng)格外注意這種情況。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部