如果你将一个结构体指针初始化为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 是否会使用正确的成员“预留一些内容”?因为似乎我可以在不初始化结构体的情况下初始化成员,而只初始化指针?
如果你将一个结构体指针初始化为NULL,并尝试更改其成员,这就是所谓的未定义行为(UB)吗?
只有很多。
当我运行它时会发生这种情况:...
C 不是一回事。 C 标准指定了一种基本语言。编译器在实现和扩展该语言的方式上有所不同。当询问程序中发生未定义行为的具体情况时,您需要完全指定您使用的 C 实现,包括编译器、其版本、编译时使用的开关以及运行程序的硬件和操作系统。