2011-01-19 28 views
6

C99 [Sekcja 6.3.2.1/1] mówilwartość nie oznacza obiektu po dokonaniu oceny?

lwartością jest wyrażeniem typu obiektu lub niekompletnym, inne niż pusty; jeśli lwartość nie wskazuje obiektu podczas jego oceny, zachowanie jest nieodwracalne.

Co oznacza udział w bold oznacza? Czy ktoś może wyjaśnić to na przykładzie?

Odpowiedz

7

Dostępne są zerowe wskaźniki, wskaźniki do dealokowanych obiektów i wskaźniki do obiektów o automatycznym czasie przechowywania, których żywotność już się zakończyła. Dereferencje skutkują niepoprawnymi wartościami l; niezdefiniowane zachowanie, które najczęściej napotykasz, to segfault'y, jeśli masz szczęście i dowolne sterty lub stos, jeśli nie.

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