realloc
extern void *realloc(void *mem_address,unsigned int newsize);
newsize指定分配空间的大小,mem_address是原来的内存区域,将原有数据从头到尾复制到新的内存区域,然后释放原来的区域,返回新区域的首地址。
malloc
extern void *malloc(unsigned int num_bytes);
分配字节数为num_bytes到
calloc
extern void *calloc(unsigned n,unsigned size);
extern void *realloc(void *mem_address,unsigned int newsize);
newsize指定分配空间的大小,mem_address是原来的内存区域,将原有数据从头到尾复制到新的内存区域,然后释放原来的区域,返回新区域的首地址。
malloc
extern void *malloc(unsigned int num_bytes);
分配字节数为num_bytes到
calloc
extern void *calloc(unsigned n,unsigned size);
内存的动态存储区中分配n个长度为size的连续空间。
#include<stdlib.h>
int main()
{
int num=5;
int i;
int *p=(int *)malloc(num*sizeof(int));
int *p1=(int *)calloc(num,sizeof(int));
printf("malloc 空间内乱码\n");
for(i=0; i<num; i++)
printf("%d\t",p[i]);
printf("\ncalloc 空间内默认为0 \n");
for(i=0; i<num; i++)
printf("%d\t",p1[i]);
for(i=0; i<num; i++)
p[i]=i+1;
num+=3;//空间扩大
p=(int *)realloc(p,num*sizeof(int));
//如果后面附加的空间使得无法找到足够连续空间进行扩展,就会在别处重新开一段连续空间,首地址就会改变
printf("\nrealloc\n");
for(i=0; i<num; i++)
printf("%d\t",p[i]);
printf("\n%d ",p);
return 0;
}