开发者社区> 问答> 正文

对一段内存调用free()函数后发生了什么?

C/C++中在对一个指针指向的内存调用free函数后,指针的值不变。那么这个指针指向的内存的值变不变呢?系统如何标记这段内存已经不再使用可以重新分配了呢?malloc free new delete操作在操作系统级别上发生了什么呢?

展开
收起
a123456678 2016-03-09 18:49:54 2820 0
2 条回答
写回答
取消 提交回答
  • free了之后内存会被释放成初始状态,只时候指针还指向这个不可用的空间,成为“野指针”,为了防止这个指针被再次使用,要将其置空,指向null。
    new的底层使用malloc实现。先使用malloc开辟出所需内存后,会调用对象构造函数初始化这片内存,相同的道理delete的底层是free+调用对象析构函数实现的,先销毁对象后再释放空间,所以malloc必须和free搭配使用,delete必须和new搭配,如果没有搭配会造成不可预知的错误。

    2019-07-17 18:56:37
    赞同 1 展开评论 打赏
  • 在使用free()以后,指针的值没有变,但是指针所指向的地址的内容已经被标记为不可以使用,留作重新分配使用。
    使用malloc的时候,实际系统只是记录了你申请的空间大小,但没有真的分配足够的空间,当你真的使用这段申请的指针地址时,操作系统会产生一个错误,标示现在有需要申请一段可用的内存了
    new实际是在malloc的基础上申请了空间,并且初始化了这段空间,因此系统将这段内存已经实际创建完成了

    2019-07-17 18:56:36
    赞同 展开评论 打赏
问答分类:
C++
问答标签:
问答地址:
相关产品:
问答排行榜
最热
最新

相关电子书

更多
内存取证与IaaS云平台恶意行 为的安全监控 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载
低代码开发师(初级)实战教程 立即下载