このコードの説明を探しています。A::hello() の呼び出しは機能します (segv が必要でした)。segfault はメンバー x へのアクセスで発生するため、メソッドの解決だけでは実際に bla を逆参照していないように見えますか?
最適化をオフにしてコンパイルしました、gcc 4.6.3。bla->hello() が爆発しないのはなぜですか? 何が起こっているのだろうか。ありがとう。
class A
{
public:
int x;
A() { cout << "constructing a" << endl; }
void hello()
{
cout << "hello a" << endl;
}
};
int main()
{
A * bla;
bla = NULL;
bla->hello(); // prints "hello a"
bla->x = 5; // segfault
}