int main()
{
float* ptr;
{
float f{10.f};
ptr = &f;
}
*ptr = 13.f;
// Do more stuff with `*ptr`...
}
使用/访问*ptr
是有效还是未定义的行为?
我测试了类似于上面示例的情况,并且所有内容似乎都起作用,好像嵌套块中变量的生命周期由于指针而延长。
我知道const&
(const引用)会延长临时的生命周期。指针是否相同?
答案 0 :(得分:6)
这是未定义的行为,因为您正在访问已解除分配的对象。
变量f
在该特定范围内声明。当执行流程达到:
*ptr = 13.f;
该对象已被取消分配,ptr
指向f
的旧地址。
因此,f
的生命周期尚未延长。
答案 1 :(得分:5)
浮点数将超出范围,指针将引用未分配的内存区域 - >使用它将导致UB。