在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代码>