free()函数在C中使用?

时间:2017-10-25 14:14:34

标签: c pointers malloc free

我很困惑并且以下面的方式思考自由指针,有人可以澄清

我一直认为free函数只是删除了存储在指针中的地址,从而破坏了指针和为block分配的空间之间的连接。最后,使空间中的值成为垃圾值,从而使其可以被其他程序自由使用。

请说明我错的原因。

此外,当您指向分配的单个空间的两个指针时会发生什么 并尝试释放他们两个?它是否会产生编译错误/运行时错误?

1 个答案:

答案 0 :(得分:1)

free(ptr)取消分配其参数ptr指向的内存块,即将块返回到空闲池。对malloc()的连续调用可能会使用该内存,将其重新分配用于其他目的。

但是,free()将其参数视为副本,即它从ptr变量中获取值,而不是变量本身 。因此,它无法清除指针'。如果您希望ptr变量变为NULL,那么您就错了。这是一个常见的错误。您应该在ptr = NULL之后自己分配free(),以确保变量值无法使用。

至于内存块本身:free()没有义务让它成为垃圾邮件'或清除它。您可以尝试通过相同的指针访问释放的内存,通常您会看到之前的内容仍然存在 但是并不依赖它!几乎任何时候内存都可以重新分配用于其他目的(释放的内存可能甚至无法用于该进程),所以摆弄使用它可能会调用不可预测的结果(所谓的未定义行为)。

尝试将块解除分配两次(即使用相同指针的第二个free())也是UB。