这是节点struct:
= 63708,
我的问题是,当我释放节点时,节点不会返回NULL,而是id返回随机内存值,那么是否有一种方法可以使用free(node)for AddressBookNode *节点来使节点为空?
答案 0 :(得分:3)
你有一个悬空指针。调用free
只释放内存,但保持指针不变。它无法更改您的指针,因为您通过值传递。释放后访问该内存是未定义的行为。
正确的方法是在调用free
后将指针设置为NULL。然后永远不要尝试遵循NULL指针。
不要编写将 free-then-set-null 范例转换为单个调用的特殊函数或宏。这只是懒惰,只能隐藏程序员的信息。在完成这项工作的大型商业项目上,我可以说这是一个完全痛苦的屁股。
因此,如果您需要将指针设置为NULL,那么就养成将指针设置为NULL的习惯。