我對以下代碼感到困惑,有人可以爲我清除它嗎?關於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) –