奇了个怪,实施这个语句块后难道没有释放对象~

奇了个怪,执行这个语句块后难道没有释放对象~~~
代码如下:

#include<iostream>

using namespace std;

class A
{

public:
int aa;

A():aa(7) {}

void fun()

cout << "fun of class A" << endl; 
aa = 5;
}
};


int main()
{
A* ptr = NULL;

{
A a;
ptr = &a;

}

ptr->fun();


return 0;
}



本来以我的理解,执行ptr = &a后跳出语句块,a对象会被释放掉,即ptr成为一个野指针,当程序执行ptr->fun()中的aa = 5时会出现内存访问错误,但是实际上没有,程序照常运行,而且ptr->aa成功赋值为5~~~

另外调试时发现,跳出语句块后,aa值还是为7,好像跳出语句块后a对象并没有被释放~~

期待高人回答~~~~奇了个怪,实施这个语句块后难道没有释放对象~
对象 调试 内存 c++

------解决方案--------------------
指针指向无效对象 
你这里是未定行为 
结果不可靠 
意思就是
可以看起来没问题 
也可以出现类似 修改其他对象 程序崩溃 的错误 
看编译器喜欢怎么做
------解决方案--------------------
作用域只是 C++ 中的概念.
栈其实一直都是那个栈, 不存在分配释放的问题, 只是把栈用于哪个变量.
即使在函数退出后, 它局部变量的内存仍然有效, 只是编译器随时会把它用作其他用途. 你继续使用的话行为未定义. 未定义不代表出错.

------解决方案--------------------
你这几行代码、编译器优化后最多使用2,3个寄存器 寄存器的值没变动。继续使用当然可行.只是在逻辑或者内存起伏比较大的情况下(后续情况肯定就会错了)
{
}
中的东西的作用域于肯定是在{}中,这点你不用怀疑