为什么没有方法查找的段错误

jar*_*eve 0 c++ null pointers segmentation-fault

我正在寻找关于这段代码的澄清.对A :: hello()的调用有效(我期望一个segv).segfault确实通过对成员x的访问,所以看起来单独的方法解决方案实际上并没有取消引用bla?

我编译优化关闭,gcc 4.6.3.为什么不把bla->你好()爆炸?只是想知道'发生了什么事.谢谢.

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
}
Run Code Online (Sandbox Code Playgroud)

Igo*_*nik 5

您的程序显示未定义的行为."似乎工作"是未定义行为的一种可能表现形式.

特别是,bla->hello()调用似乎有效,因为hello()实际上并没有this以任何方式使用,所以它恰好不会注意到它this不是一个有效的指针.