为什么这段代码能够访问空指针而不会导致崩溃?

时间:2015-04-26 10:52:54

标签: c pointers crash null-pointer

我遇到了以下代码,它找到了结构中成员的偏移量。但是我无法弄清楚为什么它不会崩溃,即使它试图取消一个NULL指针

struct a_
{
    int a;
    int b;
};

int main()
{
    int offset = &(((struct a_ *) 0x0)->b);
    printf ("offset of b = %x\n", offset);
} 

Output = 4

1 个答案:

答案 0 :(得分:4)

  

但是我无法弄清楚为什么它不会崩溃,即使它试图取消一个NULL指针。

您正在形成一个无效的地址,这是一个未定义的行为,但由于&运算符取消了取消引用,因此没有取消引用NULL指针。