2017-04-19 56 views
-3

我对以下代码感到困惑,有人可以为我清除它吗?关于C指针释放困惑

当我这样做:

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

它释放的C指针本身或者它指向的地址? (这是一个malloced地址)。

或者它是否释放了一个指针并且单独留下了malloced地址?

+2

你不会释放**指针**!你永远不会释放一个地址。 – Olaf

+0

[在实际指针的副本上使用free()是可接受的/正确的?](http://stackoverflow.com/questions/43456215/using-free-on-a-copy-of-the-actual -pointer-is-acceptable-correct) –

回答

-2

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

+0

所以在这个例子中它释放了malloced内存?对? –

+0

@Ali Kurabiyeci是的。指针是一个局部变量。它可能被“丢弃”的唯一方法是在你离开你定义的函数之后。 –

+2

你永远不会释放一个地址。释放对象后使用指针的值调用未定义的行为。 **这不仅“危险”,而且仅仅是非法**。 – Olaf

3

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

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

既然你谈谈通过指针的内存,指针是什么malloc回报,什么free需要,而且由于释放函数被调用,如动词“自由”,以及释放函数需要一个指针,这是一个简单的失误下降滑坡开始谈论“释放指针”。说“拥有指针”是一个类似的失策;真正拥有的是资源的责任。

+0

如果你有自己的位置,你可以释放一个指针(但是我想我今晚感觉很烦人)。 – ThingyWotsit

+0

@ThingyWotsit你没有帮助:D至少我明白了,谢谢你们 –

+0

@ThingyWotsit:恼人的挑剔者的工作已经开始了。但你是对的:-) – Olaf