内存分配函数malloc 与 calloc的用法及区别

在C语言的动态分配内存过程中,我们经常使用到函数 malloc 与 calloc。 这两个函数均包含在“malloc.h"中,对其用法我们有一个比较深刻的理解。

函数malloc的原型为:void *malloc( unsigned int num_bytes)  。分配长度为num_bytes个字节的内存块,返回值为无类型指针,该指针指向所分配内存块的起始位置,因此利用该无类型指针赋值给其他类型的指针的时候,需要进行强制类型转换。如下图:


当内存分配失败时,返回空指针NULL。在使用malloc 分配内存之后,进行NULL判断是一个良好的编程习惯。


函数calloc的原型为: void *calloc( unsigned int num, unsigned int size)。 作用为:在内存的动态存储区分配num个长度为size的存储块,返回指向该存储块起始地址的无类型指针,若返回失败,返回NULL。因此,同样需要对该函数返回值进行判断。 分配长度为100个int长度的内存块。


calloc 与malloc的一个相同点在于使用之后均需要free(指针),释放内存块。

不同点在于calloc分配内存之后,会自动将这一块的内存之初始化为0.而malloc则不会,分配内存的值为一些垃圾数值。因此,在使用malloc函数之后,我们一般要调用函数memset对内存进行初始化。

memset的函数原型为: void *memset(void *s, int ch, unsigned int size)  作用是:将s所指向的内存块的前size个字节全部设置为ch对应的ASCii值。 它是对较大数组或者结构体清零操作的最快方式。



  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值