(1)野指针的错误来源就是指针定义了以后没有初始化,也没有赋值(总之就是指针没有明确的指向一个可用的内存空间),然后去解引用。
(2)知道了野指针产生的原因,避免方法就出来了:在指针的解引用之前,一定确保指针指向一个绝对可用的空间。
(3)常规的做法是:
第一点:定义指针时,同时初始化为NULL
第二点:在指针使用之前,将其赋值绑定给一个可用地址空间
第三点:在指针解引用之前,先去判断这个指针是不是NULL
第四点:指针使用完之后,将其赋值为NULL
(4)野指针的防治方案4点绝对可行,但是略显麻烦。很多人懒得这么做,实战中是怎么处理?在中小型程序中,自己水平可以把握的情况下,不必严格参照这个标准;但是在大型程序中,或者自己水平感觉不好把握时,建议严格参照这个方法。
3.3.3.NULL到底是什么?
(1)NULL在C/C++中定义为:
#ifdefine _cplusplus //定义这个符号就表示当前是C++环境
#define NULL 0 //在C++中NULL就是0
#else
#define NULL (void *)0 //在C中NULL是强制类型转换为void *的0
#endif
(2)在C语言中,int *p,你可以p = (int *)0,但是不可以p = 0,因为类型不同
(3)所以NULL的实质其实就是地址0,然后我们给指针赋初值为NULL,其实就是让指针指向0地址处。为什么指向0地址处?有2点原因:第一层原因是0地址处作为一个特殊地址(我们认为指针指向这里就表示指针没有被初始化,就表示野指针);第二层原因是这个0地址在一般的操作系统中都是不可被访问的,如果不按规矩(不检查是否等于NULL就去解引用)写代码直接去解引用就会触发段错误,编译器会报错嘀。(指针指向这个敏感地址没有问题,只要不解引用就ok)
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。在评论区私信“嵌入式”0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!文章来源:https://www.toymoban.com/news/detail-714032.html
文章来源地址https://www.toymoban.com/news/detail-714032.html
到了这里,关于怎么避免野指针?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!