首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c/c++ realloc解决办法

2012-05-09 
c/c++ realloc在c和c++里面realloc这个函数,可以实现 这样的作用:原来 tem的空间为char *tem (char *) ma

c/c++ realloc
在c和c++里面realloc这个函数,可以实现 这样的作用:原来 tem的空间为char *tem =(char *) malloc (5 * sizeof(char));现在将其改为4个char空间即tem =(char *) realloc (tem, 4 * sizeof(char));

[解决办法]
void *realloc(void *ptr, size_t size)
realloc函数先检查ptr指向的内存块的大小,如果size比原来的小,那么realloc修改内存块头信息,缩短这块内存。剩下的部分就释放了。如果size比原来的大,那么看这块之后的空闲区域是否足够让原块扩展。够的话就修改内存块头信息。
不够就另外分配一块区域,复制原块内容然后释放原块的空间。
无论是否分配了新的空间,返回地址是真正有效的那块空间的地址。也就是只有在需要分配新空间时,才返回与ptr不同的地址。
特殊情况:ptr为null,则与realloc()和malloc()类似。
size为0;则与free()类似,释放ptr指向的内存,并返回null。
注意:如果没有足够可用的内存用来完成重新分配(扩大原来的内存块或者分配新的内存块),则返回null.而原来的内存块保持不变。参考如下示例:
ptr = realloc(ptr, size) 该函数有问题,当找不到足够空间时,ptr变为NULL,那以前的那块内存就丢失了。

热点排行