【发布时间】:2013-10-16 17:01:05
【问题描述】:
我正在寻找有关这段代码的说明。对 A::hello() 的调用有效(我期望一个 segv)。段错误确实发生在对成员 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
}
【问题讨论】:
-
未定义的行为是未定义的。
-
不错的链接@chris。我知道 NULL 取消引用是未定义的,但很高兴知道幕后发生了什么。
标签: c++ pointers null segmentation-fault