C语言:释放结构指针的内存

C language: Releasing memory of pointers to struct

假设我已经声明了一个指向结构的指针并使用这个定义用 malloc() 分配它

typedef struct node {
    int info;
    struct node *next;
} NODE;

然后在代码的某处我声明了两个指向它的指针

NODE *node1, *node2 = NULL;

node1 = malloc(sizeof(NODE));
node2 = node1;

我的问题是,我是否应该使用 "free()" 来释放 node2,就像人们总是通过 free(node1) 对 node1 所做的那样。赋值 node2 = node1;

的具体效果是什么

谢谢。

您应该将 malloc() 和 family 返回的地址传递给 free() 以释放分配的内存。

在你的情况下,你只是将返回的地址分配给其他指针并免费使用它,这很好。

你不应该这样做

node2 = node1;
node2 = node2 +1;

free(node2);

所以你可以在你的情况下使用其中之一来释放内存

free(node1)free(node2) 与您的情况相同

您既没有释放 node1 也没有释放 node2。你释放他们指向的内存。

考虑到这一点,应该清楚为什么您应该只调用 free 一次

当你这样做时

node1 = malloc(sizeof(NODE));

你有类似的东西

+-------+      +-----------------------------+
| node1 | ---> | memory for a NODE structure |
+-------+      +-----------------------------+

完成作业后 node2 = node1 你得到的是:

+-------+
| node1 | -\
+-------+   \    +-----------------------------+
             >-> | memory for a NODE structure |
+-------+   /    +-----------------------------+
| node2 | -/
+-------+

换句话说,你有两个指向相同内存的指针。

尝试使用两个指针变量中的任何一个调用 free 将使 两个 指针无效。

node1是一个指针,意思是它的值是分配结构的虚拟内存地址。

分配 node2 = node1 只是复制该地址。

因此 free(node1)free(node2) 是等价的。