首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有关指针的有关问题

2012-03-03 
有关指针的问题1)野指针os为每个函数维护一个栈,如果在这个函数体内声明一个指针void f(){A anew A()..d

有关指针的问题
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 指针的生命期结束后,指针自动消除。无法手动控制其生命期。

热点排行