我对以下代码感到困惑,有人可以为我清除它吗?关于C指针释放困惑
当我这样做:
char *a = malloc(10);
char *c = a;
free(c);
它释放的C指针本身或者它指向的地址? (这是一个malloced地址)。
或者它是否释放了一个指针并且单独留下了malloced地址?
我对以下代码感到困惑,有人可以为我清除它吗?关于C指针释放困惑
当我这样做:
char *a = malloc(10);
char *c = a;
free(c);
它释放的C指针本身或者它指向的地址? (这是一个malloced地址)。
或者它是否释放了一个指针并且单独留下了malloced地址?
它释放地址c指向。你仍然可以使用指针'c',但这是危险的,你永远不应该这样做。
所以在这个例子中它释放了malloced内存?对? –
@Ali Kurabiyeci是的。指针是一个局部变量。它可能被“丢弃”的唯一方法是在你离开你定义的函数之后。 –
你永远不会释放一个地址。释放对象后使用指针的值调用未定义的行为。 **这不仅“危险”,而且仅仅是非法**。 – Olaf
你永远不会“释放指针”。这只是一个非常草率的速记,新用户可以轻松地从其他懒散的前新用户那里轻松获取,而且从来没有真正质疑过。
您分配内存并释放内存。你谈论内存的方式是通过一个指向它的指针,但内存是资源,而不是任何描述内存的指针。
既然你谈谈通过指针的内存,指针是什么malloc
回报,什么free
需要,而且由于释放函数被调用,如动词“自由”,以及释放函数需要一个指针,这是一个简单的失误下降滑坡开始谈论“释放指针”。说“拥有指针”是一个类似的失策;真正拥有的是资源的责任。
如果你有自己的位置,你可以释放一个指针(但是我想我今晚感觉很烦人)。 – ThingyWotsit
@ThingyWotsit你没有帮助:D至少我明白了,谢谢你们 –
@ThingyWotsit:恼人的挑剔者的工作已经开始了。但你是对的:-) – Olaf
你不会释放**指针**!你永远不会释放一个地址。 – Olaf
[在实际指针的副本上使用free()是可接受的/正确的?](http://stackoverflow.com/questions/43456215/using-free-on-a-copy-of-the-actual -pointer-is-acceptable-correct) –