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

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

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

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

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

使用該函數(shù)要包含頭文件stdlib.h,其功能是改變ptr指針指向的空間大小,為size大小。size大小可以是任意的,也就是說既可以比原來的數(shù)值大,也可以比原來的數(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行,通過realloc擴(kuò)大p的空間,并把新的地址賦值給p

    //………………

}

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

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

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