2013-12-15 62 views
0
int main() 
{ 
    float* ptr; 

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

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

It it valid or undefined behavior to use/access *ptr指針是否延長自動存儲變量的生命期?

我測試了類似於上面例子的情況,似乎所有東西都像嵌套塊中變量的生命週期延長了,這要歸功於指針。

我知道const&(const引用)將延長臨時的生命週期。指針是否一樣?

+0

你從哪裏得到關於'const&'的信息,以延長被引用臨時的生命週期?我想,這不是事實。 –

+1

@TilmanVogel http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ –

+0

「指針是否延長自動存儲變量的生存期? 「 - 沒有。 – 2013-12-15 13:51:51

回答

5

這是未定義的行爲,因爲您正在訪問已被釋放的對象。

變量f在該範圍的特定塊中聲明。當執行流到達:

*ptr = 13.f; 

對象已被釋放,並ptr點的f舊地址。

因此否,f的使用期限未延長。

5

浮動將超出範圍,您的指針將引用未分配的內存區域 - >使用它將導致UB。

相關問題