我在讲座中被教过,free()
两次拨打指针真是非常糟糕.我知道NULL
在释放它之后立即设置指针是一种很好的做法.
但是,我仍然没有听到任何解释为什么会这样.根据我的理解,方式malloc()
有效,它应该在技术上跟踪它已经分配的指针并让你使用.那么为什么它不知道它接收到的指针是否free()
已被释放?
当你打电话free()
给以前已经被释放的位置时,我很乐意理解,内部会发生什么.
当你使用时,malloc
你告诉PC你想要在堆上保留一些内存位置.计算机返回指向寻址空间的第一个字节的指针.
当您使用时,free
您实际上正在告诉计算机您不再需要该空间,因此它将该空间标记为可用于其他数据.
指针仍然指向该内存地址.此时,另一个malloc
调用可以返回堆中的相同空间.当您free
第二次调用时,您不会释放以前的数据,而是释放新数据,这可能不适合您的程序;)