这是围绕由UB递增NULL指针引起的错误示例的讨论的相关问题
假设我定义了这个数据结构:
union UPtrMem
{
void* p;
char ach[sizeof(void*)];
}
UPtrMem u;
u.p = nullptr;
u.p++; // UB according to standards
u.ach[0]++; // why is this OK then??
Run Code Online (Sandbox Code Playgroud)
p并且ach共享相同的内存,所以仅仅是修改内存位置(恰好包含指针)UB的行为?一旦你试图取消引用指针,我认为它只会被取消定义.