通过无效指针获取结构成员时如何更改编译器行为

问题描述 投票:0回答:1

我知道一个功能,当我们可以通过 NULL 或无效指针获取结构成员的偏移量时,如下所示:

#include<stdlib.h>
#include<stdio.h>
typedef struct  A {
        int c;
        int b;
} A;
int main() {
        A *a = (A*)0x100;
        fprintf(stderr, "%p\n", &((*a).b));
        fprintf(stderr, "%p\n", &a->b);
}

本程序产生:

0x104
0x104

有没有办法禁用此功能并改为获取段错误或错误?

c pointers struct gnu ansi-c
1个回答
1
投票

你的例子是arguably未定义的行为。

因此,您不能期望出现分段错误,无论如何这是硬件的一个特性。

没有办法保证你的例子,或者只是一个空指针的简单解引用会触发错误。

© www.soinside.com 2019 - 2024. All rights reserved.