C语言中的野指针

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

野指针的成因

指针未初始化

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

指针越界访问

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

指针指向的空间释放

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

如何规避野指针

指针初始化

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

如下图:

小心指针越界

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

如下图:

避免返回局部变量的地址

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

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

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

如下图:

相关推荐
消失的旧时光-19431 分钟前
KMP Web 开发实战(二):js、wasmJs、browser、executable 到底是什么意思?
开发语言·前端·javascript·跨平台·kmp
十五年专注C++开发9 分钟前
qobject_cast转换失败原因分析
c++·qt·dynamic_cast·qobject_cast
sycmancia11 分钟前
Qt——线程的生命期问题
开发语言·qt
影寂ldy12 分钟前
C# 多线程进阶知识点(线程优先级、多委托传参、线程锁、死锁)
开发语言·数据库·c#
国服第二切图仔14 分钟前
09-搜索工具Grep与Glob
开发语言·javascript·ecmascript
小保CPP21 分钟前
OCR C++ Tesseract按单词识别字符
c++·人工智能·ocr·模式识别·光学字符识别
十月的皮皮22 分钟前
C语言学习笔记20260716-编译与链接
c语言·笔记·学习
凤山老林24 分钟前
从“无法创建本地线程“异常说起:深度解析线程栈与JVM线程优化指南
java·开发语言·jvm
库克克25 分钟前
【C++】多态
开发语言·c++
Shadow(⊙o⊙)29 分钟前
日志与线程池
linux·c++·算法