C语言:将指针的记忆释放到结构



说我已经声明了一个指向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;

谢谢。

node1 = malloc(sizeof(NODE));

您有类似

的东西
 --------  ---------------------------------------------- |Node1 |---> |节点结构的内存| --------  ---------------------------------------------- 

分配node2 = node1后,您拥有以下:

 ------- |Node1 | -   --------  ------------------------------------------------            >  -> |节点结构的内存| -------- /----------------------------------------------- |Node2 | -//------- 

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

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

您既不发布node1也不发布node2。您可以释放它们指向的内存。

考虑到这一点,应该很清楚为什么您只能致电free

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

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

你不应该做

node2 = node1;
node2 = node2 +1;
free(node2);

因此,您可以在您的情况下使用其中之一来释放内存

free(node1)free(node2)在您的情况下相同

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

分配node2 = node1仅复制该地址。

结果free(node1)free(node2)是等效的。

相关内容

  • 没有找到相关文章

最新更新