C語言 realloc()函數(shù)
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指向的空間的大小,其大小設置為整型,然后將改變后的內存空間的地址返回賦值給ilnt整型指針。
【例題】記錄內存地址
程序如下:
#include<malloc.h>
voidmain()
{
char*p, *q;
p=(char*)malloc(10);
q=p;
p=(char*)realloc(q,20);
//A行,通過realloc擴大p的空間,并把新的地址賦值給p
//………………
}
在這段程序中我們增加了指針q,用它記錄原來的內存地址p。這段程序可以編譯通過,但在執(zhí)行到A行時,如果原有內存后面沒有足夠空間將原有空間擴展成一個連續(xù)的新大小的話,realloc()函數(shù)就會以第二種方式分配內存。此時數(shù)據(jù)發(fā)生了移動,那么所記錄的原來的內存地址q所指向的內存空間實際上已經(jīng)放回到堆上了。這樣就會產(chǎn)生q指針的指針懸掛,即指針指向了一塊沒有分配給用戶使用的內存,如 果再用q指針進行操作就可能發(fā)生意想不到的問題。所以在應用reallocO函數(shù)時應當格外注意這種情況。
點擊加載更多評論>>