假设我们有以下代码:
sphere * a, * b;
a = new sphere(1.0);
b = a;
b->setRadius(2.0);
delete b;
a->setRadius(4.0);
sphere * c = new sphere(5.0);
b = new sphere(3.0);
cout << a->getRadius() << endl;
结果会怎样:
(a) 4.0
(b) 3.0
(c) A segmentation fault.
(d) Compiler error.
(e) The behavior cannot be predicted.
我认为您不需要查看 sphere 类,因为它发生的事情非常明显。现在,当我们设置 b=a
时,这意味着 b
指向 a
。然后我们 delete b
,这意味着我们删除了 b
指向的内容,这意味着 a
现在不再指向任何内容。所以当我们尝试说 a->setRadius
时,我们做不到。所以我认为这是一个seg fault
。我的看法是否正确?
最佳答案
这是未定义的行为。它可能会出现段错误,也可能会生出一窝小猫。任何一种(以及任何数量的其他可能性)都是合规行为。一个很可能的结果是它会悄悄地破坏你的堆,随后会产生令人费解的后果。
关于c++ - C++ 中带指针的简单代码的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071069/