为什么上面的代码对我有用而没有错误?
int* func() {
int var = 100;
return &var;
}
int main()
{
int* ptr = func();
cout << *ptr; // печатает 100, хотя здесь я ждал ошибки или неопределённого поведения, ведь var должна быть уже удалена к этому моменту
}
我将地址返回到var应该在退出时删除的局部变量func(),但我仍然可以访问它(cout << *ptr;)
一般原则 -
我们用key编译VC+2017
/Od,得到输出只是您的堆栈不会立即损坏:) ...
打印 100 是许多未定义行为之一。
未定义的行为与错误不同。
也许是一个错误,也许是你所期望的,或者是别的什么。