C++语言中悬挂指针的研究与应用
2016-11-02徐萍
电脑知识与技术 2016年23期
徐萍
摘要:C++悬挂指针是指那些不能正确指向合法的指针,该指针会使系统发生不可估计的后果。该文研究了国内外研究现状,从而介绍了Apace、谷歌等著名软件都存在C++悬挂指针,进一步分析了C++悬挂指针出现的类型有:指针未初始、指针对象不存在及指针释放出现问题,并提出了悬挂指针的解决方法。
关键词:C++;悬挂指针;内存泄漏
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)23-0065-02
C++语言是一门极其复杂的语言,许多程序员在使用C++语言指针编写程序时。由于操作不当,往往会出现动态内存问题,比如悬挂指针。悬挂指针是一种常见的Bug,而且不容易发现。潜在的悬挂指针危害极其严重,会导致内存溢出等安全问题。著名的开源服务器Apace就存在一个悬挂指针漏洞,该漏洞存在于Apace mod_isapi模块中,在使用Apace服务器时会出现内存溢出问题。BLee[1]统计了谷歌浏览器从2011年到2013年之间出现C++悬挂指针的漏洞如表1所示。
由此可见,针对C++悬挂指针的危害,进行C++悬挂指针的研究是非常重要的。
1 C++语言悬挂指针故障分析
悬挂指针是指针指向释放内存后的指针,是野指针的一类。C++内存分配方法是主要有堆、栈、自由存储区、全局/静态存储区以及常见存储区。下面对C++语言中悬挂指针故障进行分析。
1.1 使用未初始的指针
首先看例1代码。该程序能够通过编译,但是在运行时会出现问题。这是因为char*name定义了变量但没有指针进行初始化,因而会出现悬挂指针。
1.2 指针所指的对象消失
查看代码如例2所示,运行程序结果不是0.0。……
登录APP查看全文
