2017-07-16 69 views
-4

如果我想刪除一個指針並釋放它使用的內存,這兩段代碼有什麼區別? (在C++)在C++中這兩個「指針刪除」操作有什麼區別?

1.

delete p1; 
p1=p1->next; 

2.

int* remove; 
remove=p1; 
p1=p1->next; 
delete remove 

我都嘗試兩所1導致記憶問題,但我不知道爲什麼。

你能否告訴我你「刪除」一個指針後發生了什麼?它是否刪除指針本身?或者指針和它指向的東西?還是隻有它指向的東西?

謝謝!

+0

沒有區別,因爲你寫他們。兩者都有不確定的行爲,只是出於不同的原因。 – StoryTeller

+0

'delete remove;'是未定義的行爲,以及'p1 = p1-> next;'是。 – user0042

+0

該死的我是這個網站的新手。應該有「刪除= P1」。 –

回答

1

你的第一個片段有未定義的行爲,因爲在第二行中你訪問一個已經被刪除的對象。你的第二個片段很好。它和第一個片段一樣但避免了UB。

順便說一句:你的第二個片段中的前兩行應該是單行int* remove = p1;。畢竟這是C++,而不是超古老的C.不要在沒有堅實的理由的情況下留下未初始化的變量。