设置指向悬空指针的指针的行为

时间:2017-06-07 15:48:33

标签: c language-lawyer

我遇到过一些断言,设置指向不是标量地址或超过标量地址的指针的行为是不确定的(对数组有类似的限制)。

所以考虑一下:

int main()
{
    int* bar;
    {
        int foo = 1;
        int* b = &foo;
        bar = b;
    }     
    int* copy = bar;    
}

是否定义了int* copy = bar;的行为? bar不再指向标量,因为它超出了范围。

1 个答案:

答案 0 :(得分:3)

bar的值在关闭括号后是不确定的。

引用ISO / IEC 9899:2011,第6.2.4节§2:

  

[...]当指针指向(或刚刚过去)的对象到达其生命周期的末尾时,指针的值变得不确定。

int* copy = bar;的确切行为含糊不清 - 请参阅N1793 — Stability of indeterminate values in C11提供的eugene-sh