use*_*875 6 c++ pointers object-lifetime undefined-behavior language-lawyer
这段代码:
#include <iostream>
using namespace std;
int* fun()
{
int a = 5;
int* pointerA = &a;
cout << pointerA << endl;
return pointerA;
}
int main()
{
int* p = fun();
cout << p << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印以下内容:
0x[some address]
0
Run Code Online (Sandbox Code Playgroud)
我知道a
函数fun()
返回时会释放该变量,但是为什么cout << p << endl;
返回0?即使变量在技术上不再存在,它也不应该指向内存中的相同地址吗?这是编译器功能还是未定义的行为?
编辑:我找到了罪魁祸首。我正在使用CodeBlocks,并且在该项目的构建选项中,有一个标志“优化更多(以提高速度)[-O2]”。如果选中,则得到0
,如果不选中该标志,则得到相同的address 0x[some address]
,这是预期的行为。
对于没有提及我的IDE,我深表歉意。