c++ - C++ 中带指针的简单代码的行为

标签 c++ pointers

假设我们有以下代码:

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/

相关文章:

c++ - 正确的固定大小数组的 c++ 样式转换?

c++ - 我可以使用 std::generate 来获取 std::array<T, 2> 的 vector 吗?

c++ - 表达式:双端队列迭代器不可取消引用

用于算术运算的 C++ switch 语句

C++ - 生产者/消费者只允许消费定义的 block

c++ - 关于 C++ 中的指针和引用的困惑

java - 如何从对象列表中提取 K "smallest"元素?

Java反射嵌套方法不修改底层对象

c++ - 指向数组元素的成员指针

c - 如何在 C 中设置和更改常量变量/结构体/指针的值?