怎么避免野指针?

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

相关推荐
小龙报3 分钟前
《算法通关指南C++编程篇 --- 初阶函数递归专题》
c语言·开发语言·c++·算法·创业创新·学习方法·visual studio
YJlio17 分钟前
进程和诊断工具学习笔记(8.19):Hyper-V 来宾调试与符号配置 —— 在虚拟化场景下用 LiveKd 抓现场
网络·笔记·学习
2501_9412366224 分钟前
分布式日志系统实现
开发语言·c++·算法
星轨初途25 分钟前
《数据结构二叉树之堆 —— 优先队列与排序的高效实现(2)(下)》
c语言·开发语言·数据结构·经验分享·笔记·性能优化
2501_9412355126 分钟前
C++与机器学习框架
开发语言·c++·算法
冻感糕人~38 分钟前
Agent框架协议“三部曲”:MCP、A2A与AG-UI的协同演进
java·人工智能·学习·语言模型·大模型·agent·大模型学习
2501_9411118642 分钟前
C++模块化设计原则
开发语言·c++·算法
2501_941237531 小时前
基于C++的游戏引擎开发
开发语言·c++·算法
WMX10121 小时前
Origin学习记录
学习
枫叶丹41 小时前
【Qt开发】Qt窗口(二) -> QToolBar工具栏
开发语言·数据库·c++·qt