gpt4 book ai didi

c - 分配给指针的指针和 free() 如何协同工作?

转载 作者:太空狗 更新时间:2023-10-29 14:56:53 24 4
gpt4 key购买 nike

为什么释放一个指针会说 p,它被分配给另一个指针 q 指向的位置,同时释放 q?

//for example,
int *p = malloc(sizeof(int));
*p = 10;
int *q = malloc(sizeof(int));
q = p;
free(p);
//This frees q as well.

指针 q 和 p 具有不同的地址,但仅指向相同的位置(也就是说,它们存储相同的地址,即 10。如果我弄错了,请纠正我)。

矛盾肯定出现在我对指针的思考方式或 free() 的工作方式中,因为据我所知(不是很多),因为 q 和 p 有不同的地址,释放 p 应该不会影响q ,除非我对指针的理解有误,或者 free()/memory 以一种特殊的方式工作。

我想知道为什么会这样。(我知道帖子 Free an assigned pointer ,但它没有解释为什么或如何发生这种情况)

最佳答案

之后

int *p = malloc(sizeof(int));
x
+----+
p --------> | |
+----+

P 指向一些 x 内存,其中包含一些垃圾数据。

*p = 10;

您正在将 10 放入 x

              x
+----+
p --------> | 10 |
+----+

在下面

int *q = malloc(sizeof(int));
y
+----+
q -------> | |
+----+

您又创建了一个内存 yq 指向该内存。

当你分配

q = p;
x
+----+
p --------> | 10 |
q --------> +----+

y
+----+
Memory leak | |
+----+

你也让 q 指向了 x 内存,丢失了对 y 内存的唯一引用。

释放 p

free(p);



p --------> (invalidated)
q -------->

y
+----+
Memory leak | |
+----+

您删除了 x 内存,因此 pq 指向释放的内存。

关于c - 分配给指针的指针和 free() 如何协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58362084/

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