Chinaunix首页 | 论坛 | 博客
  • 博客访问: 518254
  • 博文数量: 96
  • 博客积分: 2102
  • 博客等级: 上尉
  • 技术积分: 1695
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:12
文章分类

全部博文(96)

文章存档

2014年(2)

2012年(94)

分类: C/C++

2012-07-02 10:43:40

    指针:它指向一个空间,基于指针可以修改空间的内容。因此对于指针的使用需要慎重。
 
  “野指针”不是NULL指针,是指向“垃圾”内存(不可用内存)的指针。对于是否使用野指针是不好判断的。因为没有一个好的判定界限。
  “野指针”也是在C++中提到的"悬垂指针"
##对于创建的指针我们会将它立即指向一个空间(通过malloc、new)或者将它赋值为NULL。为了避免它指向
     一个不合适的空间
##如果我们将某个指针释放掉后对相应的指针仍然能够进行操作。

point.c

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5.     int *p = malloc(sizeof(int));
  6.     *p=5;
  7.     printf("P= %d\n",*p);
  8.     free(p);
  9.     *p=6;
  10.     printf("P= %d\n",*p);
  11. }
结果:

分析:对于free后的P进行操作-------就是对野指针进行操作。由此得知其实free函数只是将指针指针指向的空间释放了,但是指针的值没有置为NULL,此时该野指针的空间是垃圾值。
          需要注意的是:在使用了free或者delete后要立即将指针赋值为NULL,这样就不会出现滥用指针的现象了。因为将“野指针”赋值为NULL后使得指针不会乱指,就不出现对于与内存空间随便修改的情况。此外,将指针指向NULL时,可以直接通过if进行判断。
总结出现“野指针”的原因:
1、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的,它会乱指一气。
2、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。
3、
指针操作超越了变量的作用范围。这种情况让人防不胜防。

阅读(1041) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~