假设我们有以下代码:
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;
Run Code Online (Sandbox Code Playgroud)
结果会是什么:
(a) 4.0
(b) 3.0
(c) A segmentation fault.
(d) Compiler error.
(e) The behavior cannot be predicted.
Run Code Online (Sandbox Code Playgroud)
我不认为你需要看球体类,因为它很明显是什么.现在,当我们设置时b=a,这意味着b指向a.然后我们delete b,这意味着我们删除b指向的东西,这意味着a现在不再指向任何东西了.所以,当我们试着说a->setRadius,我们不能.所以我认为那是一个seg fault.我是以正确的方式看待这个吗?
Fre*_*son 14
这是未定义的行为.它可能是段错误,或者它可能会产生一窝小猫.任何(以及任何数量的其他可能性)都是符合行为的.一个非常可能的结果是,它会在以后产生令人困惑的后果,从而无声地破坏你的堆.
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |