1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 空指针 悬空指针 野指针

空指针 悬空指针 野指针

时间:2019-09-12 14:59:18

相关推荐

空指针 悬空指针 野指针

文章目录

前言一、指针?二、指针的应用场景三、 空指针四、 悬空指针五、 野指针正确用法总结

前言

相信很多小伙伴对指针的使用都有一定的了解了。但更多的人可能对指针又爱又恨。这次我们谈点重要的,进一步加深对指针的理解


一、指针?

指针是一种特别变量,全称是指针变量,专用于存放其它变量在内存中的地址编号。把指针指向具体的内存变量的地址,就是对指针赋值。

二、指针的应用场景

用作函数的参数传递和函数的返回值。 利用指针传递参数,可避免变量复制,减少内存开销,提高效率。

三、 空指针

没有赋值的指针变量(没有指向内存变量的地址),对空指针操作会造成程序的段错误(Core dump)

四、 悬空指针

指针指向的内存已释放,但指针的值没有被清零,对悬空指针操作的结果不可预知

int main(void) {int*p=nullptr;int*p2=new int;p=p2;delete p2;}

此时p和p2就是悬空指针,指向的内存已经被释放。继续使用这两个指针,行为不可预知。需要设置为p=p2=nullptr。

解决办法:指针free或delete之后及时置空。

五、 野指针

指的是没有被初始化过的指针。

int main(void) {int*p;//未初始化std::cout<<*p<<std::endl;//未初始化就被使用return 0;}

因此,为了防止出错,对于指针初始化时都是赋值为nullptr,或置空,这样在使用时编译器就不会直接报错,产生非法内存访问。

正确用法

//关闭文件指针void CFile::Close(){if(m_fp==0) return;//检查是否为空指针,是则直接返回fclose(m_fp);//关闭文件指针,这代表着释放了文件指针指向的内存,此时指针就变成了悬空指针m_fp=0;//将悬空指针的值清零,避免隐藏bugmemset(m_filename,0,sizeof(m_filename));//如果存在临时文件就删除它if (strlen(m_filenametmp)!=0) remove(m_filenametmp);memset(m_filenametmp,0,sizeof(m_filenametmp));}


总结

对于指针使用大家要格外小心,写程序时仔细考虑清楚。

野指针和悬空指针都是指向无效内存区域(这里的无效指的是"不安全不可控")的指针,访问行为将会导致未定义行为。

避免野指针比较简单,但悬空指针比较麻烦。c++引入了智能指针,C++智能指针的本质就是避免悬空指针的产生。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。