C语言中的野指针

野指针是指指针指向的位置是随机的,不明确的,未知的,没有限制的

野指针的成因

指针未初始化

如上图,指针没有初始化 ,则指针指向的地址是随机的 ,若该地址已经被其他程序占用,且对指针进行解引用,可能会造成程序出错

指针越界访问

如上图,当i为5时,指针的指向超出数组的范围,该指针为野指针

指针指向的空间释放

如上图,当test()函数运行完后,局部变量a的空间就会被释放掉,此时返回局部变量的地址给p,p为野指针 ,若对该地址进行解引用,可能会造成非法访问

如何规避野指针

指针初始化

当创建一个指针时,如果知道指针指向哪里,就直接赋值,如果不知道指针指向哪里就将指针置为空。

如下图:

小心指针越界

当使用指针指向数组时,要明确数组所能使用的空间,不能超出范围,超出了就是越界访问。

如下图:

避免返回局部变量的地址

使用指针尽量在函数内部使用,避免返回局部变量的地址。

当指针变量不再使用时,及时置空

当指针指向的区域使用完后,若后续不再使用该指针,则要将该指针置为空。 因为约定俗成的⼀个规则就是:只要是NULL指针就不去访问, 同时使⽤指针之前可以判断指针是否为NULL

如下图:

相关推荐
t-think1 分钟前
深入了解指针(3)
c语言·算法
水木流年追梦5 分钟前
大模型入门-RL基础
开发语言·python·算法·leetcode·正则表达式
TechPioneer_lp5 分钟前
就业指导|中九非科班毕业,华为 OD 做 Java 后端想转 C++,能找到深度学习挂钩的岗工作吗?
java·c++·华为od·华为·就业指导·校招指导
.千余5 分钟前
【Linux】Socket编程UDP
linux·运维·服务器·开发语言·网络协议·学习·udp
枕星而眠7 分钟前
C++ String类精讲:从基础用法到进阶底层原理
开发语言·c++·后端·学习方法
江屿风8 分钟前
【C++笔记】模板初阶流食般投喂
开发语言·c++·笔记
Shadow(⊙o⊙)9 分钟前
qt信号和槽链接的接入与断开
开发语言·前端·c++·qt·学习
AI玫瑰助手11 分钟前
Python运算符:逻辑运算符(and/or/not)的短路特性
开发语言·python·信息可视化
m0_4746067812 分钟前
JAVA - 使用Apache POI 自定义报表字段手写导出(支持-合并单元格)
java·开发语言·apache
肩上风骋12 分钟前
C++基本知识点积累之d指针,invokemethod函数(一)
开发语言·c++·d指针·invokemethod()