我在讲座中被教导,召唤free()
两次使用指针真的非常非常糟糕。我知道这是一个很好的做法,将指针设置为NULL
,在释放它之后。
然而,我仍然没有听到任何关于为什么会这样的解释。据我了解,方法malloc()
有效,从技术上讲,它应该跟踪它已分配并供您使用的指针。那么为什么它不知道它是否通过接收到一个指针free()
已经被释放了吗?
我很想了解,当您致电时,内部会发生什么free()
在先前已被释放的位置上。
当你使用malloc
您告诉 PC 您想在堆上为您保留一些内存位置。计算机返回一个指向寻址空间第一个字节的指针。
当你使用free
您实际上是在告诉计算机您不再需要该空间,因此它将该空间标记为可用于其他数据。
指针仍然指向该内存地址。此时堆中的相同空间可以由另一个返回malloc
称呼。当你调用free
第二次,您不会释放以前的数据,而是释放新数据,这可能对您的程序不利;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)