【C语言】动态内存管理方式:malloc/calloc/realloc的区别
发布日期:2021-05-10 06:33:22 浏览次数:19 分类:精选文章

本文共 659 字,大约阅读时间需要 2 分钟。

1.相同点

  1. 都是C语言中用来进行动态内存申请的库函数
  2. 申请的空间在堆上,用完之后必须使用free来进行释放
  3. 如果空间申请空间成功,返回空间的首地址,如果申请失败返回的是NULL,因此在使用之前必须要进行判空
  4. 返回值类型都是void*,在接收返回值时必须进行强转

 

2.不同点

  • void* malloc(size_t size)
    malloc的参数是用户所申请的字节数,申请空间成功返回空间的首地址,如果申请失败,返回的是空,用户在进行接收时,必须要进行强转在使用时必须要进行判空使用完之后必须要借助free释放。

 

  • void* calloc(size_t num.size_t size)

    参数个数不同:
    num:表示元素的个数
    size:表示蛋哥元素所占的字节数
    功能的不同:calloc会将其申请的内容空间初始化为0
     

  • void* realloc(void *p, size_t size)

    p==NULL—>该函数的功能与malloc类似—直接申请size个字节返回即可
    p!=NULL—>将p指向的空间大小调整到size字节
     
    假设:p指向空间的大小为oldsize字节
    size <= oldsize:将p指向的空间缩小,然后返回原空间的首地址即可
    size > oldsize:将p指向的空间扩大
    (1)大一点点 :realloc(p, 16);
    直接在p的基础上进行延伸
     
    (2)大很多:realloc(p, 40)
    申请size个字节的新空间
    将旧空间中的内容拷贝到新空间
    释放旧空间,返回新空间的地址

上一篇:printf函数使用—针对不同数据类型的输出结果详解
下一篇:【牛客】有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月25日 17时33分03秒