怎么避免野指针?

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

相关推荐
道法自然|~13 小时前
【PHP】简单的脚本/扫描器拦截与重要文件保护
开发语言·爬虫·php
wdfk_prog14 小时前
[Linux]学习笔记系列 -- [fs]dcache
linux·数据库·笔记·学习·ubuntu
GoWjw14 小时前
在C&C++中结构体的惯用方法
c语言·开发语言·c++
静心观复14 小时前
Java 中,`1 << 1`
java·开发语言
Bruce_kaizy14 小时前
c++单调数据结构————单调栈,单调队列
开发语言·数据结构·c++
阿坤带你走近大数据14 小时前
Python基础知识-数据结构篇
开发语言·数据结构·python
froginwe1114 小时前
AJAX 实时搜索:技术原理与实现方法
开发语言
小智RE0-走在路上14 小时前
Python学习笔记(7)--集合,字典,数据容器总结
笔记·python·学习
发光小北14 小时前
SG-CAN (FD) NET-210(双通道 CAN (FD) 转以太网网关)特点与功能介绍
开发语言·网络·php
电子工程师-C5114 小时前
基于51单片机的家居环境监测系统
单片机·嵌入式硬件·51单片机