2011-01-19 42 views
6

C99 [節6.3.2.1/1]表示左值在評估後沒有指定對象?

左值是與一個對象類型或大於空隙以外的不完全類型的表達式; 如果一個左值在評估時沒有指定一個對象,則該行爲是不確定的。

是什麼在部分大膽是什麼意思?有人可以用一個例子來解釋嗎?

回答

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; 
}