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

标签 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

最佳答案

However I am not able to make out why it does not crash, even though it tries to derefer a NULL pointer.

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

关于c - 为什么这段代码能够访问空指针而不会导致崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29876707/

相关文章:

c - 如何查看二进制代码编译后的C代码?

c - 在 C 中使用 bsd/socket api 继续发送格式错误的 TCP header

数组内字符串中的 C 索引

c - 这个指向指针的指针是多余的吗?

android - 应用程序启动后崩溃(在智能手机和模拟器上)

c - 在 C 中使用某些运算符和操作数运行程序时出错

c - 无法在 C 中打印指针数组

crash - 调用XtDestroyWidget时,主题应用程序崩溃

Android 从 BroadcastReceiver 崩溃启动时启动应用程序

c - 四舍五入甚至没有始终如一地应用?