2011-01-19 22 views
6

C99 [セクション6.3.2.1/1]はlvalueは評価後にオブジェクトを指定しませんか?

左辺値は、オブジェクト型またはvoid以外の不完全な型の式であると言います。 左辺値が評価されるときにオブジェクトを指定しない場合、その動作は定義されていません。

太字における部分は何を意味するのでしょうか?誰か例を挙げて説明してもらえますか?

答えて

7

ヌルポインター、割り当てられていないオブジェクトへのポインター、および自動保存期間が既に終了しているオブジェクトへのポインターが気になりました。無効な左辺値でこれらの結果を参照解除します。あなたが幸運であればsegfaults、そうでなければ任意のヒープまたはスタックの破損が最も頻繁に発生する未定義の動作です。

5
#include <stdio.h> 

int* ptr; 

void f(void) { 
    int n = 1; 
    ptr = &n; 
} 

int main(void) { 
    f(); 
    // UB: *ptr is an lvalue that is not an object: 
    printf("%d\n", *ptr); 
    return 0; 
} 
関連する問題