This question already has answers here:
What will happen when I call a member function on a NULL object pointer?
(6个答案)
2年前关闭。
上面代码的实际输出是
根据我的理解,它应该给SEG错误提供访问0x0 addess的权限。
因为* p地址是0x0。
为什么起作用?有人解释吗?
(6个答案)
2年前关闭。
class Foo
{
public:
Foo(int i)
{
_i = i;
}
void p()
{
cout<<"printed"<<endl;
}
int _i;
};
int main()
{
Foo *p = 0;
cout <<p<<endl;
p->p();
return 0;
}
上面代码的实际输出是
0
printed
根据我的理解,它应该给SEG错误提供访问0x0 addess的权限。
因为* p地址是0x0。
为什么起作用?有人解释吗?
最佳答案
这是无效的。但是不确定的行为不能保证段错误或其他任何东西。
您在这里不能依靠任何东西,所以不要这样做。它可以(似乎)正常工作,崩溃,可以烧毁计算机或其他任何东西。
在这种特殊情况下,方法p()不依赖于其类中的任何其他内容,并且允许编译器假定您的代码中没有UB,因此它很可能仅执行p甚至不使用指针执行任何操作(但同样,不能保证编译器可以那样工作)。
关于c++ - Foo * p = 0; p-> p()如何有效? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42807560/
10-09 15:46