【问题标题】:Confused about C pointer freeing对 C 指针释放感到困惑
【发布时间】:2017-04-19 00:24:40
【问题描述】:

我对以下代码感到困惑,有人可以帮我清理一下吗?

当我这样做时:

char *a = malloc(10);
char *c = a;
free(c);

它是释放 c 指针本身还是它指向的地址? (这是一个分配地址)。

或者它是否释放 a 指针并单独保留分配的地址?

【问题讨论】:

标签: c


【解决方案1】:

你永远不会“释放指针”。这只是一个非常草率的速记,新用户可以轻松地从其他草率的前新用户那里获取所有内容,并且从不真正质疑。

您分配内存并释放内存。您谈论该内存的方式是通过指向它的指针,但内存是资源,而不是任何描述内存的指针。

既然您通过指针谈论内存,那么指针就是malloc 返回的内容和free 获取的内容,并且因为释放函数被称为动词“free”,并且释放函数接受指针,所以它是一个很容易在滑坡上误入歧途,开始谈论“释放指针”。说“拥有指针”是一个类似的错误;真正拥有的是对资源的责任。

【讨论】:

  • 如果你已经分配了它自己的位置,你可以释放一个指针,(但我想我今晚感觉很讨厌迂腐:)。
  • @ThingyWotsit 你没有帮助 :D 至少我明白了,谢谢大家
  • @ThingyWotsit:烦人的挑剔者的工作已经完成。但你是对的:-)
  • @AliKurabiyeci:做我的工作:你传递一个指针的(到函数的本地指针)。 C 是严格按值传递;你应该做一些研究,一本好的 C 书应该解释这个基本概念,它实际上完全回答了你的问题(在一般层面上)。
【解决方案2】:

它释放了 c 指向的地址。你仍然可以使用指针'c',但这是危险的,你不应该这样做。

【讨论】:

  • 所以在这个例子中它释放了分配的内存?对吗?
  • @Ali Kurabiyeci 是的。指针是一个局部变量。唯一可以“丢弃”它的方法是在您离开定义它的函数之后。
  • 您永远不会释放地址。并且在释放对象后使用指针的值会调用未定义的行为。 这不仅“危险”,而且简直是非法的
  • @Olaf,确实。它释放c 寻址的内存(c 指向的内存)。
  • 如果我通过 malloc 为其分配一个新地址,我可以使用 c 指针吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多