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)
是等价的。
假设我已经声明了一个指向结构的指针并使用这个定义用 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)
是等价的。