2011-01-19 9 views
6

C99 [Sección 6.3.2.1/1] dicelvalue no designa un objeto después de la evaluación?

Un lvalue es una expresión con un tipo de objeto o un tipo incompleto distinta de vacío; si un lvalue no designa un objeto cuando se evalúa, el comportamiento es indefinido.

¿Qué la parte en negrita significa? ¿Alguien puede explicarlo con un ejemplo?

Respuesta

7

punteros nulos, los punteros a objetos cancelar la asignación y punteros a objetos con una duración de almacenamiento automático cuya vida útil ha terminado ya vienen a la mente. Desreferenciando estos resultados en lvalues ​​no válidos; el comportamiento indefinido con el que se encontrará con más frecuencia son segfaults si tiene suerte y un montón arbitrario o corrupción de la pila si no es así.

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