gpt4 book ai didi

c - 如果两个指针指向同一个内存地址,是只需要使用free(ptr)一次还是两次?

转载 作者:行者123 更新时间:2023-12-05 01:36:12 25 4
gpt4 key购买 nike

假设我们有一个结构......

struct node{
int data;
struct node *next;
};

struct node *new_node = malloc(sizeof(node));

struct node *temp_node = new_node;


如果我使用免费...
free(temp_node);

new_node 也是免费的(因为地址不再存在)还是 new_node 只是指向 NULL(在这种情况下我也需要释放 new_node)?

干杯!

最佳答案

您不会释放指针,而是释放您分配的内存块 - 指针指向的地址。

malloc ,它返回指向已分配内存块的指针,如下所示:

             +--------+
| |
new_node --> | 0x1000 |
| |
+--------+

如果 0x1000是该内存块的起始地址,即 new_node指向(即 new_node == 0x1000 )。

当您分配 new_nodetemp_node , temp_node指向同一 block 内存(即 temp_node == 0x1000 ):
             +--------+
| |
new_node --> | 0x1000 | <-- temp_node
| |
+--------+

但是您只分配了一 block 内存。因此,一旦您通过任一指针释放它,另一个将自动失效,并且您不再被允许通过任一指针访问该 block 。

同样,您可以将它分配给任意数量的指针,但只要它通过一个指针释放,它就完成了。这就是为什么在复制指针时需要小心(因为如果你释放一个指针,它可能仍会被无意使用)。

P.S.:释放后的指针可能指向也可能不指向 NULL - 访问释放的内存只是未定义的行为。

关于c - 如果两个指针指向同一个内存地址,是只需要使用free(ptr)一次还是两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58757213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com