2016-04-30 14 views
2

私はちょうど私がアドレス変数int型*アプリを削除した場合、それはCOUTます、しかしポインタとcoutのアドレス変数

int main() 
{ 
    int *app; 
    int abc = 2; 
    *app=3; 
    cout << *app << endl << &*app << endl << abc; 
    cout << &abc; 

} 

をクラッシュ変数ABCとプログラムのアドレスをcoutにしようとしていますaddress of abc

int main() 
{ 
    int abc = 2; 


    cout << &abc; 

} 

別の無関係のアドレス変数が存在すると、なぜそれに影響するかわかりません。お知らせ下さい。

+0

「動作しません」と指定してください – user463035818

+0

'* app = 3'のとき、' app'はどのアドレスを保持していますか?未定義。 –

+0

アプリは有効なメモリアドレスを指していません。最初のケースではセグメンテーションフォルトが発生しているはずです。 – Varun

答えて

4

問題はここにある:

*app=3; 

これはおそらくセグメンテーションフォールト未定義の動作の原因となります。

削除すると、予想される出力が表示されます。

+1

...そしてここでも 'cout << * app << endl <<&* app' –

+0

もちろん@bkVnetです。 '* app = 3;'は間違っていることになりますので、w.r.tを印刷してください。それは問題になるでしょう。私はそれを私の答えに含めるべきだと思いますか? – gsamaras

+0

いいえ、私は明らかに言及していました。あなたはポイントをうまく解決しました。 –

2

あなたは何をしようとしていますか?これは未定義の動作です。

int *app; // pointer is not initialized. 
int abc = 2; 
*app=3; // de-referencing an uninitialized pointer. Bad. 
関連する問題