realloc_malloc_calloc的区别

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);

内存的动态存储区中分配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;
}


猜你喜欢

转载自blog.csdn.net/dt_zhangshuo/article/details/79117793
今日推荐