预防野指针的几种方法
来源:互联网 发布:软件广告好烦 编辑:程序博客网 时间:2024/04/29 09:56
野指针,又称迷途指针,即指向“垃圾”内存的指针。此时指针指向的内存已被操作系统回收,程序已无法再访问。
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进行指针的有效性检查,如果失败,则表明该对象已经被释放。
1 0
- 预防野指针的几种方法
- 几种预防禽流感的方法:
- 预防空指针的方法
- 数组指针,字符串指针的几种定义方法
- 预防死锁的方法
- 预防阻塞的方法
- 堆栈溢出的预防方法
- 预防"熊猫烧香"的几点注意事项
- 函数指针初始化和调用的几种方法
- 预防感冒伤风的22种简单有效方法
- 网站攻击的三种手段及预防方法
- 几种常用的指针
- 有效的预防电脑辐射的方法
- 预防口腔疾病最经济的方法
- 痱子的预防和治疗方法
- autorun病毒的一个原始预防方法
- 基本预防asp中木马的方法
- 预防和检测内存泄漏的方法:
- TWR-K60D100M+MQX4.1.1_RTCS_examples_eth_to_serial
- php中函数 isset(), empty(), is_null() 的区别
- Effective C++ Item03 Note
- HDOJ 5104 -----素数问题
- LEETCODE: Longest Palindromic Substring
- 预防野指针的几种方法
- android开发命令行给apk签名
- 新浪sae部署django1.4
- Linux内核多线程(一)
- C++对文件的操作(不断更新中)
- cookie、session及实现记住密码,自动登录
- 数学函数
- 磁盘分区以及分区的类型、格式化的作用
- SCI常见经典句型