【问题标题】:Does a pointer extend the lifetime of an automatic-storage variable? [duplicate]指针是否会延长自动存储变量的生命周期? [复制]
【发布时间】:2014-01-02 22:00:40
【问题描述】:
int main() 
{
    float* ptr;

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

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

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

我测试了与上述示例类似的情况,一切似乎都可以正常工作,就好像嵌套块中变量的生命周期由于指针而延长了一样。

我知道const&(常量引用)会延长临时对象的生命周期。指针也一样吗?

【问题讨论】:

  • 您从哪里获得有关const & 延长所引用临时文件的生命周期的信息?我认为,这不是真的。
  • "指针是否会延长自动存储变量的生命周期?" - 没有。
  • @TilmanVogel 真的。然而,指针不是引用。
  • 与参考文献的联系充其量是微不足道的。您的问题与临时值无关。

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


【解决方案1】:

这是未定义的行为,因为您正在访问已被释放的对象。

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

*ptr = 13.f;

对象已被释放,ptr 指向f 的旧地址。

因此没有,f 的生命周期没有延长。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-05-03
      • 2015-07-31
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 2014-10-28
      相关资源
      最近更新 更多