C语言 realloc()函数
realloc()函数的原型如下:
void *rea11oc(void *ptr, size_t size);
使用该函数要包含头文件stdlib.h,其功能是改变ptr指针指向的空间大小,为size大小。size大小可以是任意的,也就是说既可以比原来的数值大,也可以比原来的数值小。返回值是一个指向新地址的指针,如果出现错误,则返回NULL。例如,改变一个分配的实型空间大小成为整型大小:
fDouble=(double*)malloc(sizeof(double));
ilnt=realloc(fDouble, sizeof(int));
其中,fDouble是指向分配的实型空间,之后使用realloc()函数改变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。这段程序可以编译通过,但在执行到A行时,如果原有内存后面没有足够空间将原有空间扩展成一个连续的新大小的话,realloc()函数就会以第二种方式分配内存。此时数据发生了移动,那么所记录的原来的内存地址q所指向的内存空间实际上已经放回到堆上了。这样就会产生q指针的指针悬挂,即指针指向了一块没有分配给用户使用的内存,如 果再用q指针进行操作就可能发生意想不到的问题。所以在应用reallocO函数时应当格外注意这种情况。
点击加载更多评论>>