指针

来源:互联网 发布:windows mediaplayer11 编辑:程序博客网 时间:2024/04/29 18:23

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

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

3)我用delete或free把指针指向的内容删除了,同时将指针指向NULL,但指针本身还是存在的,只不过指向NULL.对吧
那如何彻底删除这个指针? 不但删除指针指向的内容,同时删除其本身
 
 
问题点数:20 回复次数:5 显示所有回复显示星级回复显示楼主回复    
 

believefym
feng
等 级:
 发表于:2007-10-23 08:50:291楼 得分:0
1,指向堆,只不过不重新赋为NULL就成为一个野指针,因为指向的内容已经被删除了

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

3,基于第二点,指针本身是存放在栈上的,不需要我们自己手动释放,只有指针指向的堆上的空间(new 或malloc出来的)才需要我们释放
 
  
 
mimong_lin
听雨
等 级:
 发表于:2007-10-23 08:55:582楼 得分:0
都给1楼抢光了。
 
  
 
seraphsky
 
等 级:
 发表于:2007-10-23 08:58:413楼 得分:0
谢谢楼上5颗星
一会没问题我就结贴

我想问下
指针本身是一个unsigned int吗

 
 
  
 
jixingzhong
瞌睡虫·星辰
等 级:
 发表于:2007-10-23 08:58:554楼 得分:0
1  a还是指向原来 new 获得的空间地址,只是这个地址已经被delete了,再使用a操作会非法
2  指针本身在栈中,其值就是一个整型值,值的内容为指针指向的 地址
3  指针的生命期结束后,指针自动消除。无法手动控制其生命期。
 
  
 
seraphsky
 
等 级:
 发表于:2007-10-23 09:01:045楼 得分:0
是不是所有的指针都是4字节的(对于目前的系统来说?)
我sizeof(int *) sizeof(float *)
sizeof (A *)全是4