2017-04-19 89 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