1)假如原来的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址;
2)假如原来的内存后面没有足够多剩余内存的话,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被free掉,realloc返回新内存的地址.
3)如果没有足够可用的内存用来完成重新分配(扩大原来的内存块或者分配新的内存块),则返回null.而原来的内存块保持不变。
4)如果newsize大小为0,那么释放原内存,相当于free(),并返回null。
函数简介
原型 :extern void *realloc(void *mem_address, unsigned int newsize); 语法: 指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小不然的话会导致数据丢失! 头文件 :#include < stdlib.h > 有些编译器需要#include <alloc.h>,在TC2.0中可以使用alloc.h头文件 功能 :先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。 返回值 :如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 注意: 这里原始内存中的数据还是保持不变的。当内存不再使用时,应使用free()函数将内存块释放。#include<stdio.h>
#include<stdlib.h> int main() { int i; int *pn=(int *)malloc(5*sizeof(int)); printf("%p\n",pn); for(i=0;i<5;i++) scanf("%d",&pn[i]); pn=(int *)realloc(pn,10*sizeof(int)); printf("%p\n",pn); for(i=0;i<5;i++) printf("%3d",pn[i]); printf("\n"); free(pn); return 0; }
参考:http://baike.baidu.com/view/736230.htm