假设我已经声明了一个指向结构的指针,并使用这个定义用 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 到底有什么作用?

谢谢。

最佳答案

当你做

node1 = malloc(sizeof(NODE));

你有类似的东西

+-------+ +------------------------------+
|节点 1 | ---> |节点结构的内存|
+-------+ +------------------------------+

在分配 node2 = node1 之后,您改为:

+-------+
|节点 1 | -\
+-------+\+------------------------------+
>-> |节点结构的内存|
+--------------+/+------------------------------+
|节点2 | -/
+-------+

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

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

关于C语言 : Releasing memory of pointers to struct,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40760341/

10-11 23:10