这是节点结构:
typedef struct addressBookNode
{
int id;
char name[NAME_LENGTH];
AddressBookArray * array;
struct addressBookNode * previousNode;
struct addressBookNode * nextNode;
} AddressBookNode;
我的问题是,当我释放节点时,该节点不会返回 NULL,而是返回随机内存值,所以有没有办法为 AddressBookNode * 节点使用 free(node),这将使节点为 NULL?
最佳答案
你有一个悬挂指针。调用 free
只会释放内存,但会使您的指针完好无损。它无法更改您的指针,因为您按值 传递了它。在释放内存后访问该内存是未定义的行为。
正确的方法是在调用free
之后将您的指针设置为NULL。然后永远不要尝试跟随 NULL 指针。
不要编写将 free-then-set-null 范式滚动到单个调用中的特殊函数或宏。那只是懒惰,只会对程序员隐藏信息。在参与过大型商业项目之后,我可以说这是一个彻头彻尾的痛苦。
所以只要养成将指针显式设置为 NULL 的习惯,如果你需要它为 NULL。
关于c - 在 C 中释放一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43992220/