首页 > 代码库 > 预防野指针的几种方法
预防野指针的几种方法
野指针,又称迷途指针,即指向“垃圾”内存的指针。此时指针指向的内存已被操作系统回收,程序已无法再访问。
3)如果指针作为函数的输入参数时,在引用参数前首先对指针进行参数检查。
对比上面两种swap函数的实现方式,可以看出:通过引用实现数值互换时,在函数调用的时候,只需要将两个整数传递给swap函数即可。
野指针,不是NULL指针,而是看上去指向合法内存,却在实际上该内存已经释放。
下面是,预防野指针的几种方法。
1)声明指针时,记得初始化,例如:
char* p=NULL;
2)当指针没有使用价值时,记得释放,释放成功后记得为该指针赋值NULL。例如:
if(NULL != P) { delete p; p = NULL; }
3)如果指针作为函数的输入参数时,在引用参数前首先对指针进行参数检查。
在函数的入口处使用assert(NULL != p)对参数进行检验,或者用if(NULL != p)来检验。它会提醒指针没有初始化,起到定位错误的功能。assert是一个宏,后面括号里的条件若不满足,则程序会终止运行并提示出错位置。使用完指针后,务必释放该指针所指向的内存。
4)尽量使用引用替代指针。
引用具有指针的功能,同时它还有普通变量的功能。引用对应的变量务必真实存在。引用作为函数的输入参数具有比指针更直接的视觉效果。例如,swap函数的指针实现和引用实现。
//指针实现两数交换 void swap(int *pa,int *pb) { int tmp=0; tmp=*pa; *pa=*pb; *pb=tmp; } //引用实现两数交换 void swap(int &pa,int &pb) { int tmp=0; tmp=pa; pa=pb; pb=tmp; }
对比上面两种swap函数的实现方式,可以看出:通过引用实现数值互换时,在函数调用的时候,只需要将两个整数传递给swap函数即可。
而通过指针实现数值交换,在函数调用的时候,必须将两整数的地址传递给swap函数。另外如果传递的指针为野指针,其结果不堪设想。
5)使用智能指针,避免野指针。
如果不同对象都需要访问堆上的同一份指针,智能指针可以有效地避免野指针。用智能指针(推荐shared_ptr)进行包装,不同对象可拥有智能指针包装后的指针,每次存取之前使用智能指针的方法_Expired进行指针的有效性检查,如果失败,则表明该对象已经被释放。
预防野指针的几种方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。