gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:52 25 4
gpt4 key购买 nike

假设我们有以下代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com