2017-06-07 7 views
2

スカラーのアドレスではなく、スカラーのアドレスでないものへのポインタを設定したときの動作は、配列の制限)。ダングリングポインタへのポインタの設定時の動作

だから、このことを考慮してください。

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

int* copy = bar;の挙動は

を定義していますか? barはスコープの外にあるので、もはやスカラーを指していません。

+0

* dereferencing *これは間違いなく未定義ですが、これについては完全にはわかりません。しかし実際には問題はない。 –

答えて

3

barの値は、閉じ括弧の後で不定です。 ISO/IEC 9899クォート

:2011、セクション6.2.4§2:

[...]それは(または単に過去の)ポイントオブジェクトはの終わりに到達したときにポインタの値は不定となりますその寿命。

int* copy = bar;の正確な動作が曖昧である - eugene-shによって提供さN1793 — Stability of indeterminate values in C11を参照してください。

+0

うわー。つまり、私は実際にコピーを取るべきではありません。 –

+0

@PaulLogueとにかくポイントは何ですか(これに答えたい場合は質問に追加してください)。しかし、はい、これはあまり安全ではありません。 – Stargateur

関連する問題