c - 在 C 中释放一个结构

标签 c memory-management struct

这是节点结构:

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/

相关文章:

java - 使用 JNI 或其他工具,是否可以在 Java 中实现 C 代码的反射?

go - 如何使用反射设置作为指向任意值的指针的结构成员

c - 释放 OpenCV IplImage 会使应用程序崩溃?

c++ - C 宏的标准合规性

c - 使用 realloc 缩小结构内的字符串

c - 不用 Malloc 动态分配内存

c - fscanf 只扫描我文件的第一个值

c - 如何将所有位设置为 1 或零取决于原始数字

ios - 内存占用过高 - 如何在 iPad 上处理大图像?

c# - C# 中类与结构的 "Overhead"?