谈谈malloc()和free()

1.函数原型

(void *)malloc(int size)

malloc函数的返回值是一个void类型的指针,参数为int类型数据,即申请分配的内存大小,单位是byte。
内存分配成功之后,malloc函数返回这块内存的首地址。你需要一个指针来接收这个地址。但是由于函数的返回值是void *类型的,所以必须强制转换成你所接收的类型。也就是说,这块内存将要用来存储什么类型的数据。

比如:
char * p = (char *)malloc(100);
在堆上分配了100个字节内存,返回这块内存的首地址,把地址强制转换成char 类型后赋给char 类型的指针变量p。同时告诉我们这块内存将用来存储char类型的数据。也就是说你只能通过指针变量p来操作这块内存。这块内存本身并没有名字,对它的访问是匿名访问。

申请内存失败

如果所申请的内存块大于目前堆上剩余内存块(整块),则内存分配会失败,函数返回NULL。注意这里说的“堆上剩余内存块”不是所有剩余内存块之和,因为malloc函数申请的是连续的一块内存。既然malloc函数申请内存有不成功的可能,那我们在使用指向这块内存的指针时,必须用if(NULL!=p)语句来验证内存确实分配成功了。

申请0字节内存

此时函数并不返回NULL,而是返回一个正常的内存地址。但是你却无法使用这块大小为0的内存。这
好比尺子上的某个刻度,刻度本身并没有长度,只有某两个刻度一起才能量出长度。对于这
一点一定要小心,因为这时候if(NULL!=p)语句校验将不起作用。

内存释放

free函数可以释放malloc申请的空间,它只有一个参数,就是所要释放的内存块的首地址。
free(p)实质作用:斩断指针变量与这块内存的关系。free(p)后,p就不能操作这块空间了,但注意了此时p里面还是存着这块空间的地址,所以还有把p指空(p = NLLL)
注意:不能对P连续2次以上使用free函数。malloc和free必须是一一对应,如果是多对一会发生内存泄漏,一对多会发生错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值