指针是否延长了自动存储变量的生命周期?

时间:2013-12-15 13:46:41

标签: c++ variables pointers storage automatic-storage

int main() 
{
    float* ptr;

    {
        float f{10.f};
        ptr = &f;
    }

    *ptr = 13.f;
    // Do more stuff with `*ptr`...
}

使用/访问*ptr是有效还是未定义的行为?

我测试了类似于上面示例的情况,并且所有内容似乎都起作用,好像嵌套块中变量的生命周期由于指针而延长。

我知道const&(const引用)会延长临时的生命周期。指针是否相同?

2 个答案:

答案 0 :(得分:6)

这是未定义的行为,因为您正在访问已解除分配的对象。

变量f在该特定范围内声明。当执行流程达到:

*ptr = 13.f;

该对象已被取消分配,ptr指向f的旧地址。

因此,f的生命周期尚未延长。

答案 1 :(得分:5)

浮点数将超出范围,指针将引用未分配的内存区域 - >使用它将导致UB。