【问题标题】:Free a struct in C在 C 中释放一个结构
【发布时间】:2017-05-16 03:55:02
【问题描述】:

这是节点结构:

typedef struct addressBookNode
{
    int id;
    char name[NAME_LENGTH];
    AddressBookArray * array;
    struct addressBookNode * previousNode;
    struct addressBookNode * nextNode;
} AddressBookNode;

我的问题是,当我释放节点时,节点不会返回 NULL,而是 id 返回随机内存值,所以有没有办法将 free(node) 用于 AddressBookNode * 节点,这将使节点为 NULL?

【问题讨论】:

  • 在 C 中最简单的方法是创建一个函数 Free(AddressBookNode *),该函数将调用 free,然后将值设置为 null
  • 有没有办法是的。 free(node); node = NULL;

标签: c memory-management struct


【解决方案1】:

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

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

不要编写将 free-then-set-null 范式转换为单个调用的特殊函数或宏。这只是懒惰,只是用来向程序员隐藏信息。在从事过这样做的大型商业项目之后,我可以说这完全是一件令人头疼的事情。

所以只要养成将指针显式设置为 NULL 的习惯,如果您需要它为 NULL。

【讨论】:

    猜你喜欢
    • 2021-07-30
    • 2012-11-15
    • 2020-04-22
    • 2011-07-25
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    相关资源
    最近更新 更多