lvalue在评估后没有指定对象?

Pra*_*rav 6 c c99 language-lawyer

C99 [部分6.3.2.1/1]说

左值是具有对象类型或除void之外的不完整类型的表达式; 如果左值在评估时未指定对象,则行为未定义.

粗体部分是什么意思?有人可以用一个例子解释一下吗?

Chr*_*oph 7

空指针,指向解除分配对象的指针以及指向具有自动存储持续时间且寿命已经结束的对象的指针都会浮现在脑海中.取消引用这些结果导致无效左值; 如果你很幸运,你最常遇到的未定义行为是段错误,如果没有,你会遇到任意堆或堆栈损坏.


asc*_*ler 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;
}
Run Code Online (Sandbox Code Playgroud)