动态内存分配函数
realloc();
原型
extern void *realloc(void *mem_address, unsigned int newsize);
返回值
如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL
功能&使用
intpn = (int)malloc(4sizeof(int));
intpnn = (int*) realloc( pn, N*sizeof(int));
为已有指针(pn)重新分配内存大小
- 内存变大时:
- 若原有连续空间足够,则直接在其后开辟空间,不改变首地址
- 若原有位置连续空间不够,则另外开辟所需的空间,将pn指向的内容拷贝到新的空间中,并自动释放pn,将新的首地址赋给pnn
- 内存变小时:
抛弃内容
#include<stdio.h>
#include<stdlib.h>
#define N 2
int main()
{
int i;
int *pn=(int *)malloc(5*sizeof(int));
printf("the address of pn is:%p\n",pn);
for(i=0;i<5;i++)
pn[i] = i+1;
printf("the size of int is:%d\n",sizeof(int));
int *pnn=(int *)realloc(pn, N*sizeof(int));
printf("the address of pnn is:%p\n",pnn);
//printf("the elements in pnn are:");
//for(i=0;i<5;i++)
//printf("%3d",pnn[i]);
printf("the new address of pn is:%p\n",pn);
printf("the elements in pn are:");
for(i=0;i<5;i++)
printf("%3d",pn[i]);
printf("\n");
//free(pn);
free(pnn);
return 0;
}
当为2时
当N为100000时
可以看出,原来地址空间不够大时,realloc会另外开辟空间