指针:它指向一个空间,基于指针可以修改空间的内容。因此对于指针的使用需要慎重。
“野指针”不是NULL指针,是指向“垃圾”内存(不可用内存)的指针。对于是否使用野指针是不好判断的。因为没有一个好的判定界限。
“野指针”也是在C++中提到的"悬垂指针"
##对于创建的指针我们会将它立即指向一个空间(通过malloc、new)或者将它赋值为NULL。为了避免它指向
一个不合适的空间
##如果我们将某个指针释放掉后对相应的指针仍然能够进行操作。
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- int *p = malloc(sizeof(int));
- *p=5;
- printf("P= %d\n",*p);
- free(p);
- *p=6;
- printf("P= %d\n",*p);
- }
结果:
分析:对于free后的P进行操作-------就是对野指针进行操作。由此得知其实free函数只是将指针指针指向的空间释放了,但是指针的值没有置为NULL,此时该野指针的空间是垃圾值。
需要注意的是:在使用了free或者delete后要立即将指针赋值为NULL,这样就不会出现滥用指针的现象了。因为将“野指针”赋值为NULL后使得指针不会乱指,就不出现对于与内存空间随便修改的情况。此外,将指针指向NULL时,可以直接通过if进行判断。
总结出现“野指针”的原因:
1、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的,它会乱指一气。 2、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。
3、指针操作超越了变量的作用范围。这种情况让人防不胜防。
阅读(1088) | 评论(0) | 转发(0) |