有关指针的有关问题

有关指针的问题
1)野指针
os为每个函数维护一个栈,如果在这个函数体内声明一个指针
void f(){
  A a=new A();
  ..
  delete a;
  a=NULL; //这个地方如果不让a指向NULL,那么a是指向堆上的还是栈上的一块空间?按道理是指向堆的,因为是在堆上分配的内存,但又感觉可能指向函数栈内的某快地址
}

2)指针本身是由什么存放的?可以不可以把指针就理解为一个地址的别名?

3)我用delete或free把指针指向的内容删除了,同时将指针指向NULL,但指针本身还是存在的,只不过指向NULL.对吧
那如何彻底删除这个指针? 不但删除指针指向的内容,同时删除其本身

------解决方案--------------------
1,指向堆,只不过不重新赋为NULL就成为一个野指针,因为指向的内容已经被删除了

2,指针本身就是一个整型,内容就是地址

3,基于第二点,指针本身是存放在栈上的,不需要我们自己手动释放,只有指针指向的堆上的空间(new 或malloc出来的)才需要我们释放
------解决方案--------------------
1 a还是指向原来 new 获得的空间地址,只是这个地址已经被delete了,再使用a操作会非法
2 指针本身在栈中,其值就是一个整型值,值的内容为指针指向的 地址
3 指针的生命期结束后,指针自动消除。无法手动控制其生命期。