当前位置: 首页 > 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,导致指针仍指向已释放的内存。

相关文章:

  • 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 岗位一二面校招面经
  • 李强会见巴西总统卢拉
  • 西北大学副校长成陕西首富?旗下巨子生物去年净利超20亿,到底持股多少
  • 山东省市监局“你点我检”专项抽检:一批次“无抗”鸡蛋农兽药残留超标
  • 习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式
  • 比特币挖矿公司GRYP股价涨超171%:将与特朗普儿子创设的公司合并
  • 来伊份:已下架涉事批次蜜枣粽产品,消费者可获额外补偿,取得实物后进一步分析