为什么指针可以访问已经释放的局部变量,不是不可以吗?

编译运行平台:VS2012+Debug+Win32,
代码如下:
#include <iostream>
using namespace std;

int* retAddr(){
int num=10;
return #
}

int main(){
int* p=NULL;
p=retAddr();
//cout<<&p<<endl;
cout<<*p<<endl;
getchar();
}
程序可正常运行并输出10,也可以通过指针p进行修改,但是如果将代码中注释的哪行取消注释,*p输出的就是随机值。按理说非静态局部变量退出函数体后生命周期结束,指针p就成了也指针,不应该可以正常运行,这是VC++编译器没有进行严格检查造成了吗?

相似回答