lvalue не обозначает объект после оценки? - PullRequest
6 голосов
/ 19 января 2011

C99 [Раздел 6.3.2.1/1] говорит

lvalue - это выражение с типом объекта или неполным типом, отличным от void; если lvalue не обозначает объект при оценке, поведение не определено.

Что означает часть в полужирный ?Может кто-нибудь объяснить это на примере?

Ответы [ 2 ]

7 голосов
/ 19 января 2011

На ум приходят нулевые указатели, указатели на освобожденные объекты и указатели на объекты с автоматическим хранением, чье время жизни уже закончилось.Разыменование этих результатов в недопустимых lvalues;Неопределенное поведение, с которым вы чаще всего сталкиваетесь, - это ошибки сегмента, если вам повезет, и случайное повреждение кучи или стека, если нет.

5 голосов
/ 19 января 2011
#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;
}
...