说我已经声明了一个指向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)
是等效的。