malloc之后为什么要free()? free到底释放了什么?

通俗的来说,malloc是分配内存
free是释放malloc所分配的内存。
那么free之后,原来malloc的值还在吗?如果free之后我还要调用这里面的值呢?
free释放的是内存而不是指针,举个例子。
假设我用malloc分配了一块内存空间,并改写其中的内容为"100"。那么在我free之后,这块内容还是100,并不会变化,原来指向它的指针也还是指向它。那么free()所释放的内存到底是什么呢?
我们应该知道,在我们malloc这块区域之前,这块内存就有它自己的内容
当我们free()掉了这块内存,虽然看似里面的内容没有变化,可实际上当我们再次调用这个指针去进行操作的时候就会出错。
malloc分配给你这块内存的意思就是这是一块有着固定大小的存储区域,而当你free掉后,这块区域的就是去了自己原来的大小边界(例如原来是4个字节,free之后就不会告诉你这是4个字节)
所以free之后再去对指针操作是危险的,因为你不知道在这块内存周围是否存储了其他重要信息,free之后应该把指针修改为NULL

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
`malloc` 和 `free` 是 C 语言中用于动态内存分配和释放的函数。它们的底层实现通常依赖于操作系统提供的系统调用。 1. `malloc` 的底层实现: - `malloc` 函数用于在堆(heap)上分配一块指定大小的内存空间。 - 它通过系统调用(如 `sbrk` 或 `brk`)向操作系统请求增加堆的大小来满足分配请求。 - 在分配内存时,`malloc` 首先会检查堆空间中是否有足够的连续空闲内存块来满足请求,如果没有,则会向操作系统请求增加堆的大小。 - 一旦找到合适的内存块,`malloc` 标记该内存块为已分配,并返回该内存块的起始地址。 2. `free` 的底层实现: - `free` 函数用于释放之前通过 `malloc` 分配的内存空间。 - 当调用 `free` 函数时,它会将被释放的内存块标记为未分配,以便后续的 `malloc` 调用可以再次使用该内存块。 - 内存管理器会对相邻的未分配内存块进行合并,以减少碎片化,并回收未使用的内存给操作系统。 需要注意的是,`malloc` 和 `free` 的具体实现可能因操作系统和编译器而异。不同的操作系统和编译器可能采用不同的内存管理算法和数据结构来实现动态内存分配。例如,常见的实现方式包括使用显式空闲链表、隐式空闲链表、分配位图等。 总的来说,`malloc` 和 `free` 的底层实现通常涉及与操作系统的交互,通过系统调用来分配和释放堆上的内存空间。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值