怎么避免野指针?

(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元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

相关推荐
chouchuang1 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
炸膛坦客2 小时前
单片机开发工具篇:(九)MCU 芯片包的安装
单片机·嵌入式硬件
云空2 小时前
《Three.js 3D实例大全》
开发语言·javascript·3d·three.js
techdashen2 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
开发语言·后端·golang
C137的本贾尼3 小时前
第七篇:消息队列(MQ)——就是个带存储的异步通信管道
java·开发语言·中间件
从零开始的代码生活_4 小时前
C++ list 原理与实践:双向链表、迭代器与简化实现
开发语言·c++·后端·学习·算法·链表·list
hy.z_7774 小时前
【C语言】11. 深入理解指针1
c语言·开发语言
二炮手亮子4 小时前
记录AI学习之路Day13:小模型(AI生成)
学习
charlie1145141914 小时前
现代C++工程实践——WeakPtr 第二关:核心骨架与控制块
开发语言·c++
ttwuai5 小时前
Go 后台接口 401/403 排查:JWT 过期、刷新请求和权限码怎么定位
开发语言·golang·状态模式