#include <iostream>
int Value()
{
int x = 90;//creates a variable x
return x;//returns the value x, into the caller
//x is destroyed because it is out of scope
}
int * ptr()
{
int x = 7;//creates variable x
return &x;//returns a pointer to x
//x gets destroyed because it is out of scope
}
では、私は私のウォッチウィンドウに= 7をPY *。 未定義の動作をしないでください。プログラムがクラッシュするはずです。ここで、pyはガーベッジを持つアドレスを指しています(ptr()のxは範囲外です)。値で戻り、アドレス
UBの問題点は、可能性の1つは動作するように思われることです。呼び出しの順番を変えてみてください。値の呼び出し後に '* py'の値が変わることがよくあります。 –
私は今私に0を与えました。ありがとう – Forat
これは非常にコンパイラとOSにも依存しています。これは、すべての状況下で同じように動作することが保証されているのではなく、実装が定義されているため、定義されていない動作によって意味されます。 – ugar