【发布时间】:2020-03-01 10:30:48
【问题描述】:
鉴于以下情况:
typedef struct d
{
int x;
} D;
typedef struct c
{
D d;
} C;
typedef struct b
{
struct c *c;
} B;
typedef struct a
{
B b;
} A;
int main()
{
A *p1;
D *p2;
p2 = &p1->b.c->d;
}
我的问题是:怎么可能有 (p2 != NULL) IF (p1->b.c == NULL) ?
【问题讨论】:
-
NULL的设置在哪里?我所看到的只是一个未初始化的p1,用于分配给p2?? -
因为取消引用未初始化和 NULL 指针是未定义的行为。这意味着程序可能会崩溃,或者它可能会将
0放入p2,或者它可能会在p2中放入一个非零值,或者它可能是任何其他未定义的行为。 -
p2尚未分配值。你不能取消引用它。