指针是不是会延长自动存储变量的生命周期? [复制]

Posted

技术标签:

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

    float* ptr;

    
        float f10.f;
        ptr = &f;
    

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

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

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

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

【问题讨论】:

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

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

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

*ptr = 13.f;

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于指针是不是会延长自动存储变量的生命周期? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C语言中static是做啥用的?

XSS利用之延长Session生命周期

C语言中,哪种存储类的作用域与生命周期是不一致的?

C语言的一些重要概念

关于变量的可见性和生命周期

简述static关键字void与void *(void指针)函数指针