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

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

提問人:劉團圓發(fā)布時間:2020-12-03

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

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

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

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

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

其中,fDouble是指向分配的實型空間,之后使用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擴大p的空間,并把新的地址賦值給p

    //………………

}

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

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

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