calloc和realloc

calloc和realloc

  • calloc和realloc一样都是在堆区分配内存
  • 不同 点在于calloc会将分配的内存初始化为0

realloc重新在堆区分配内存

如果分配的内存比如原来的大,这个时候有两种情况出现:

  • 原有空间后序有足够大的空闲空间,那么直接在原有空间后继续开辟内存,返回原有空间的首地址
  • 原油空间后序没有足够大空闲空间,则重新分配一个足够大的空间,并且将原有空间的内容拷贝到新空间下,释放原有空间,将新空间的首地址返回。

代码示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void test01()
{
   
        //int *p = malloc(sizeof(int) * 10);
        int*p=calloc(10,sizeof(int));//和malloc不同的地方在于 将堆区分配的内容初始化为0
        for (int i = 0; i < 10; i++)
        {
   
               printf("%d\n",p[i]);
        }
        if (p != NULL)
        {
   
               free(p);
               p = NULL;
        }
}
//realloc重新在堆区分配内存
void test02()
{
   
        int *p = malloc(sizeof(int)*10);
        printf("%d\n",p);
        for (int i = 0; i < 10; i++)
        {
   
               p[i]=i;
        }
        p=realloc(p,sizeof(int)*110);
        for (int i = 0; i < 10; i++)
        {
   
               printf("%d\n", p[i]);
        }
        printf("%d\n", p);
}
int main()
{
   
        //test01();
        test02();
        return EXIT_SUCCESS;
}

更多文章,敬请关注微信公众号:YQ编程

C/C++基础 文章被收录于专栏

本专栏收录C/C++编程语言相关知识

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
06-26 17:24
已编辑
宁波大学 golang
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务