将结构体指针初始化为NULL,然后尝试更改其成员

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

如果你将一个结构体指针初始化为NULL,并尝试更改其成员,这就是所谓的未定义行为(UB)吗?

我有这个代码:

#include <stdio.h>
typedef struct aStructure {
    int testInt;
}aStructure;


int main(void) {

    aStructure * a=NULL;
    a->testInt = 123;
    printf("%d", a->testInt);

}

当我运行它时会发生这种情况:

  • 我没有收到任何警告或错误消息。
  • 需要几秒钟才能停止。
  • 它什么也不打印。

我想知道这里“幕后”发生了什么?当我在没有初始化结构的情况下初始化结构指针时,C 是否会使用正确的成员“预留一些内容”?因为似乎我可以在不初始化结构体的情况下初始化成员,而只初始化指针?

c pointers struct undefined-behavior
1个回答
0
投票

如果你将一个结构体指针初始化为NULL,并尝试更改其成员,这就是所谓的未定义行为(UB)吗?

只有很多。

当我运行它时会发生这种情况:...

C 不是一回事。 C 标准指定了一种基本语言。编译器在实现和扩展该语言的方式上有所不同。当询问程序中发生未定义行为的具体情况时,您需要完全指定您使用的 C 实现,包括编译器、其版本、编译时使用的开关以及运行程序的硬件和操作系统。

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