函數簡介
原型: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()函數將內存塊釋放。
應用舉例
從這個例子可以看出realloc函數的功能。
- #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;
- }