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

【C++八股】野指针和悬空指针

野指针(Wild Pointer)是指未被初始化或指向非法内存地址的指针。在 C/C++ 等语言中,指针变量如果在定义时未被初始化,其值是随机的,可能指向任意内存位置,这种指针被称为野指针。使用野指针进行解引用操作会导致未定义行为,可能引发程序崩溃或数据损坏。

野指针的产生原因

1. 未初始化的指针: 指针在声明时未被赋予有效的内存地址,默认值是随机的。

int* ptr; // ptr 是野指针,未初始化

2. 指向已释放内存的指针: 指针指向的内存已被释放,但指针本身未被置为 nullptr,导致指针仍指向已释放的内存。

int* ptr = new int(10);
delete ptr; // ptr 变为悬空指针
// ptr 仍指向已释放的内存

避免野指针的方法

1. 初始化指针: 在声明指针时,立即将其初始化为 nullptr 或有效的内存地址。

  int* ptr = nullptr; // 初始化为空指针

2. 释放内存后置空指针: 在使用 deletefree 释放内存后,立即将指针置为 nullptr,防止悬空指针的产生。

  int* ptr = new int(10);
  delete ptr;
  ptr = nullptr; // 防止悬空指针

3. 使用智能指针: 在 C++ 中,使用 unique_ptrshared_ptr 等智能指针来管理动态内存,智能指针会在超出作用域时自动释放内存,减少野指针的风险。

  #include <memory>

  std::unique_ptr<int> ptr = std::make_unique<int>(10);
  // ptr 超出作用域时,自动释放内存

总之,野指针是指向非法内存地址的指针,使用时需特别小心。通过初始化指针、释放内存后置空指针以及使用智能指针等方法,可以有效避免野指针的产生,确保程序的稳定性和安全性。

野指针和悬浮指针的区别

野指针悬空指针都是指向无效内存区域的指针

野指针    定义: 未被初始化的指针,指向随机的内存地址。

产生原因: 指针声明时未进行初始化,导致其值为随机值。

悬空指针 定义: 指向已释放或超出作用域的内存地址的指针。

产生原因: 指针指向的内存已被释放,但指针本身未被置为 nullptr,导致指针仍指向已释放的内存。

http://www.dtcms.com/a/26908.html

相关文章:

  • SOME/IP--协议英文原文讲解9
  • golang面试题:两个interface{} 能不能比较?
  • SprutCAMX16数控软件介绍
  • uniapp图像转换(获取本地选取或拍照的图片的base64、Blob、图像和base64的转换)
  • vscode复制到下一行
  • 什么是网络安全审计?网络安全审计的作用...
  • 【Mastering Vim 2_04】第三章:追随最佳实践:插件管理之道
  • 用PyInstaller构建动态脚本执行器:嵌入式Python解释器与模块打包 - 简明教程
  • 第四天面试题
  • Kafka消息服务之Java工具类
  • 在局域网中连接Grafana数据源
  • 什么是Grok-3?技术特点,场景,潜在问题与挑战
  • 数据结构(第八章 排序算法)
  • 成人床垫更新关于 SOR/2016-183 和《纺织品贴标和广告法规》的合规
  • nginx ngx_http_module(10) 指令详解
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-dataset.py
  • Windows编程:在 VS2019 里面,显示行号
  • petalinux高版本设置自动登录和开机自启动配置
  • 敏捷项目管理:适应快速变化的项目环境
  • 武汉小米 Java 岗位一二面校招面经
  • Bazel 教程
  • MyBatis 中 SqlMapConfig 配置文件详解
  • HTML/CSS中交集选择器
  • 前七章综合练习
  • 集合 数据结构 泛型
  • Element UI常用组件
  • 知识库-登陆接口
  • 《论语别裁》第01章 学而(03) 四书五经的假面目
  • 萌新学 Python 之 if 语句的三目运算符
  • SFT数据指令评估-2.基于困惑度的5种指标(微调白盒模型)