2016-03-31 2 views
-3

のは、私はいくつかのクラス型ptrClassであることがポインタ変数を定義しましょう文でないワンセグ断層場合行いますなぜこれが[C++]

ptrClass *ptr; 

とのこのptrClassは、A返すget()と呼ばれるメンバ関数を持っているとしましょうポインタは何も指していません。

我々がやるそうだとすれば:

ptr->get(); 

これはワンセグ障害につながります。

ただし、if(ptr->get())を実行しても、segフォールトは発生しません(if文は実行されません)。誰かがなぜこれに当てはまるか説明できますか? if文の条件を確認するには、プログラムがptr->get()を実行しないため、segaultが発生しますか?

+0

エラーを再現する最小限のサンプルコードを表示できますか?私たちはptrClassについて何も知らない – KABoissonneault

+1

あなたは、サンプルがうまくいくことを証明する、未定義の 'ptrClass * ptr;'ポインタを逆参照している**未定義の動作**を持っているだけです。 –

+1

'ptr-> get()'を使うことは、 'ptr'が有効なオブジェクトを指していないときの動作は未定義です。未定義の行動を理解しようとするのは無意味です。定義上、定義されていません。何でも起れる。 –

答えて

1

バグのコードは、期待していないことを行います。それは本当に簡単です。バグを修正すれば、謎が解消されます。

1

無効なポインタの呼び出し方法は未定義の動作です。何かが起こる可能性があります。

あなたはget()が何をするか表示されませんが、get()thisを使用しないとvirtualないない場合、プログラムはptrデリファレンスので、それは無効なポインタを使用しませんしません。

関連する問題