int *newbase = (int*)realloc(oldbase,(old_length+5)*sizeof(int))
realloc是指在原先的那块内存上在其后方添加了5个内存空间,还是重新又找了块空间一下分配出来?oldbase = newbase这一步需不需要?如果说是在原来那块内存上接着分配增加的空间,那恰好这连续的空间正好正被使用,那realloc函数岂不是极其容易分配失败?而如果又重新找了一块空间一下分配,那之前使用的的那部分内存岂不是泄露了?
void *realloc(void *p,size_t size)
realloc函数将p指向的对象的长度修改为size个字节,如果新分配的内存比原来的大,则原来的数据保持不变,增加的空间不进行初始化。
如果新分配的内存比原来的内存小,则新的内存空间不被初始化,realloc函数返回指向新分配空间的指针,若无法满足要求则返回NULL 指针,在这种情况下,原指针p指向的单元内容保持不变。
扩展资料:
使用总结
1、ealloc失败的时候,返回NULL
2、realloc失败的时候,原来的内存不改变,不会释放也不会移动
3、假如原来的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址。
假如原来的内存后面没有足够多剩余内存的话,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被free掉,realloc返回新内存的地址。
参考资料来源:百度百科-realloc
原型:extern void *realloc(void *ptr, size_t newsize);
用法:#include <stdlib.h>
功能:改变ptr所指内存区域的大小为newsize长度。
说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
示例:
#include <stdio.h>如果realloc()失败,ptr指向的这块内存不会变化,不会free或者移动。也就是说,如果realloc()失败了,照着上面代码的写法,这块内存就被永远遗忘。
tmp = realloc(p, new_size);