C语言如何防止野指针
2015-04-12 21:13
295 查看
一、野指针 首先,我们先介绍下什么是野指针吧,野指针指指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为 NULL 避免, <pre name="code" class="cpp">{ int *p; //野指针1 ... }
2.指针释放之后未置空
有时指针在free或delect后未赋值 NULL,便会使人以为是合法的。别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。此时指针指向的就是“垃圾”内存。释放后的指针应立即将指针置为NULL,防止产生“野指针”。
<span style="font-size:18px;">main() { char *p = new char[10]; delete [] p; //野指针2 if (p !=null) //此处指针p指向任意内存 { ... } }</span>
3.指针操作超过变量的作用域
不要返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放。
示例如下:
int * fun() { int a = 5; int * pa = &a; return pa; } void main() { int *p = fun(); //野指针3</span> printf("%d",*p); //此时*p的值不确定,因为她指向任意值 }
三、避免野指针的方法
1.指针变量一定要初始化为NULL,因为任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的。
2.当指针p指向的内存空间释放时,没有设置指针p的值为NULL。delete和free只是把内存空间释放了,但是并没有将指针p的值赋为NULL,所以当delete或free完后把指针设为NULL。
3.不要返回已经消亡的指针。
总结:我们只能通过养成以上习惯来避免野指针的出现,不然程序出现的bug极难发现和调试出来。
相关文章推荐
- 一.数组和指针的差别二.函数的好处以及使用函数的注意项。三.用c语言如何实现面向对象?c语言哪些点体现了面向对象。
- C语言学习笔记(6)-如何从变量声明的表面上来区分指针数组和数组指针
- ====如何通过捕获异常来防止空指针ANR
- C语言复杂指针声明应如何阅读
- C语言中如何避免野指针
- C语言中指针的指针是如何工作的?
- C语言数组和指针是如何访问的
- C语言中如何用指针交换两个数的大小
- 如何读懂C语言指针
- C语言中动态分配数组指针后如何释放
- c语言 如何用指针来处理字符串?
- 在微机中或者C语言中指针的功能是如何实现的?
- 如何用C语言函数指针实现C语言弹性编码,TCP/IP协议中的经典例子
- C语言——通过指针如何操作字符串——储存和运算
- C语言中的交通规则(主要防止野指针)
- C语言复杂指针声明应如何阅读
- C语言 如何在函数中使用指针?
- C语言-----内存与指针(3) How 4000 do you pass a string to a function如何给一个函数传入字符串作为参数:
- C语言复杂指针声明应如何阅读
- 如何读懂c语言指针