【发布时间】:2020-06-18 10:03:15
【问题描述】:
这是一个简单的例子。
void func()
{
int* p = nullptr;
if(p == nullptr)
{
int n;
p = &n;
}
*p = 10; // undefined behavior??
}
int main()
{
func();
}
没有编译警告(visual studio 2019),这样使用“* p = 10”是“未定义行为”吗?
它会因编译器、调试或发布而异吗?
【问题讨论】:
-
简短回答:是的
-
“是未定义的行为吗?”是的。
-
程序执行的操作可能因编译器和月相而异,但始终未定义
-
@NikosC.:呸,我以为我明天有一个巨大的重构工作。
-
fwiw,编辑并没有改变问题或答案的任何内容。当您的代码具有 UB 时,编译器不需要发出警告或错误