当前位置: 首页 > article >正文

C语言中的野指针

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

野指针的成因

指针未初始化

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

指针越界访问

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

指针指向的空间释放

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

如何规避野指针

指针初始化

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

如下图:

小心指针越界

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

如下图:

避免返回局部变量的地址

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

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

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

如下图:


http://www.kler.cn/a/281870.html

相关文章:

  • Python设计模式详解之5 —— 原型模式
  • 深入解析大带宽服务器:性能优势与选择指南
  • QT QLabel双击事件
  • SQL MID() 函数详解
  • .NET桌面应用架构Demo与实战|WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper
  • 开源项目低代码表单设计器FcDesigner获取表单的层级结构与组件数据
  • 深度强化学习算法(二)(附带MATLAB程序)
  • 【60天备战2024年11月软考高级系统架构设计师——第0天:详细规划与学习心得】
  • 软件设计原则之开闭原则
  • 序列化和反序列化,objectMapper 详解
  • C++ 当不同依赖有相同文件夹
  • Spring Boot 动态定时任务:实现与应用详解
  • Django后端架构开发:构建在线云媒资系统思路解析
  • SQLite 存储过程
  • 科学重温柯南TV版:基于B站视频数据分析
  • 网络协议概述,ip协议,TCP协议,udp协议,二者区别,python中用socket类实现网络通信程序的编写(服务器套接字实现TCP编程,UDP编程)
  • nginx转发接口地址【非常实用】
  • Flink内存调优
  • el-input按回车 界面自动刷新
  • 【C/C++】Sleep()函数详解
  • 苹果 iOS / iPadOS 18 beta8和iOS / iPadOS 18.1 beta3版本更新
  • 【生命之树】
  • 开环响应(频率响应+相移响应)+闭环响应(负反馈对带宽的影响+增益-带宽积)+正反馈与稳定性/补偿(选学)
  • DENCLUE算法原理及Python实践
  • 字典查找对应输入的字符
  • 【TVM 教程】构建图卷积网络