这是一个简单的例子。
void func()
{
int* p = nullptr;
if(p == nullptr)
{
int n;
p = &n;
}
*p = 10; // undefined behavior??
}
int main()
{
func();
}
没有complie警告(Visual Studio 2019),这样使用“* p = 10”是“未定义行为”吗?
它会因编译器、调试或版本而异吗?
最佳答案
是的,取消引用p
的行为未定义。
另请注意,一旦指向的对象超出范围,即使 读取 p
的行为也会出现问题:此时它是无效的指针值,形式上读取p
的行为是实现定义的,其中可以包括系统生成的运行时错误。
后一点经常被忽视。
关于c++ - 范围内有一个变量。在范围之外使用此变量地址是否是未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60551017/