在C中释放结构

时间:2017-05-16 03:55:03

标签: c memory-management struct

这是节点struct:

= 63708,

我的问题是,当我释放节点时,节点不会返回NULL,而是id返回随机内存值,那么是否有一种方法可以使用free(node)for AddressBookNode *节点来使节点为空?

1 个答案:

答案 0 :(得分:3)

你有一个悬空指针。调用free只释放内存,但保持指针不变。它无法更改您的指针,因为您通过值传递。释放后访问该内存是未定义的行为

正确的方法是在调用free后将指针设置为NULL。然后永远不要尝试遵循NULL指针。

不要编写将 free-then-set-null 范例转换为单个调用的特殊函数或宏。这只是懒惰,只能隐藏程序员的信息。在完成这项工作的大型商业项目上,我可以说这是一个完全痛苦的屁股。

因此,如果您需要将指针设置为NULL,那么就养成将指针设置为NULL的习惯。