在C中释放结构

在C中释放结构,c,memory-management,struct,C,Memory Management,Struct,这是节点结构: typedef struct addressBookNode { int id; char name[NAME_LENGTH]; AddressBookArray * array; struct addressBookNode * previousNode; struct addressBookNode * nextNode; } AddressBookNode; 我的问题是,当我释放节点时,节点不会返回NULL,而是id返回随机内存值,

这是节点结构:

typedef struct addressBookNode
{
    int id;
    char name[NAME_LENGTH];
    AddressBookArray * array;
    struct addressBookNode * previousNode;
    struct addressBookNode * nextNode;
} AddressBookNode;
我的问题是,当我释放节点时,节点不会返回NULL,而是id返回随机内存值,那么有没有办法对AddressBookNode*节点使用free(node)来使节点为NULL?

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

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

不要编写将free-then-set-null范式滚动到单个调用中的特殊函数或宏。这只是懒惰,只会对程序员隐藏信息。在从事过这样的大型商业项目之后,我可以说这是一件非常痛苦的事情


因此,只要养成习惯,如果你需要将指针显式设置为NULL,那么就可以将指针设置为NULL。

在C中最简单的方法是使用函数
Free(AddressBookNode*)
调用
Free
,然后将值设置为
NULL
。有办法吗<代码>自由(节点);node=NULL