2012-02-07 8 views
1

2つのポインタが同じオブジェクトを指していて、ポインタ1を使用してポインタを削除しても、メモリに残っていてポインタ2がnullを指すか、それを解放するためにポインタ2を削除する必要がありますか?C++ 2同じオブジェクトへのポインタ

私は意味:

int *p1, *p2; 
p1=new int; 
p2=p1; 
*p1=5; 
p2=p1; 
delete p1; 

int x=*p2; 
//Error or x=5? 
+0

「p2」には何も割り当てません。 – sth

+0

あなたの例では、p2に値を与えないので、p1と同じではありません!それ以外は、軌道のライトネスレースがスポットライトです。ああ、しかし、コードの質問:エラーが発生するか、エラーが発生しない可能性があります。それはUBです。 –

+0

@ Mr Resister:それは習慣です;) –

答えて

8
  • オブジェクトがなくなっになります。
  • ポインタ2はヌルポインタではなく、ポインタをダングリングしていますが、以前の値は現在無効です。それで何かするのは間違いです。
  • これはポインタ1でも同様です。両者には違いはありません。

1 - まあ、UB、ない "エラー" 自体。しかし、しないでください。

+0

Thanx、ちょうど私が知りたいと思ったもの:) –

1

2つのポインタが同じメモリを指していないのが一般的です。それはあなたが1つを削除すると、もう1つはぶら下がりポインタになるからです。

メモリを削除した後に行う操作はすべて、未定義の動作です。

メモリがp2に指定されているので、を忘れてしまったと思いますが、ご質問のとおり、int x=*p2;は未定義です。

+0

メモリはまだありますが、オブジェクトはありません。 –

+0

@LightnessRacesinOrbit私は彼が私のポイントを得たことを願っています(私はあなたがしたことを知っています)。明らかにあなたのRAMはどこにも行くつもりはありません:) –

+0

私はそれが現場でビームアウトできると思います –

関連する問題