C++基础面试题 | C++中野指针和悬挂指针的区别?

news/2024/10/9 0:39:00 标签: c++, 面试, 开发语言

在这里插入图片描述

文章目录

    • 回答重点:
      • 1. 野指针(Wild Pointer):
      • 2. 悬挂指针(Dangling Pointer):
    • 拓展知识:如何避免这些问题野指针和悬挂指针

回答重点:

在C++中,野指针是指未初始化的指针,即它没有被显式地指向任何有效的内存地址。而悬挂指针是指指向已经被释放或无效内存的指针。

1. 野指针(Wild Pointer):

  • 野指针是指未初始化的指针,即它没有被显式地指向任何有效的内存地址。
  • 野指针可能指向任何地方,包括已经被释放的内存区域、未分配的内存区域,或者其他程序的内存区域。
  • 使用野指针是非常危险的,因为它可能导致程序崩溃或数据损坏。

示例

int *p;
*p = 100; // 未初始化的指针,试图通过它写入数据,这是不安全的

2. 悬挂指针(Dangling Pointer):

  • 悬挂指针是指指向已经被释放或无效内存的指针。
  • 这种情况通常发生在指向动态分配内存(如使用new分配的内存)的指针,在该内存被释放后,指针没有被设置为nullptr,仍然指向原来的地址。
  • 悬挂指针的使用同样非常危险,因为它可能导致未定义行为,包括程序崩溃。

示例

int *p = new int(10);
delete p;
*p = 20; // 错误,p是悬挂指针,指向的内存已经被释放

拓展知识:如何避免这些问题野指针和悬挂指针

  • 野指针:确保所有指针在使用前都被初始化指向一个有效的地址或设置为nullptr
  • 悬挂指针:释放动态分配的内存后,立即将指针设置为nullptr,以避免悬挂指针的产生。
int *p = new int(10);
delete p;
p = nullptr; // 避免悬挂指针
  • 使用智能指针:(如std::unique_ptrstd::shared_ptr)可以自动管理内存,减少这些问题的发生。
#include <memory>

std::unique_ptr<int> p(new int(10));
// 不需要手动释放内存,智能指针会自动处理

http://www.niftyadmin.cn/n/5695057.html

相关文章

构建MySQL健康检查Web应用

构建MySQL健康检查Web应用 在这里将探讨如何将MySQL健康检查功能转换为一个功能完整的Web应用。这个应用允许用户通过简单的Web界面执行MySQL健康检查&#xff0c;并查看详细的结果。我们将逐步介绍代码实现、改进过程以及如何设置和运行这个应用。 1. MySQL健康检查类 首先…

【数据结构】---图

图 前言 本篇作为图的基础概念篇&#xff0c; 了解图的离散数学定义&#xff0c; 图的分类&#xff0c; 图模型解决的问题&#xff08;图的应用&#xff09;&#xff0c; 图的相关算法&#xff08;仅仅介绍&#xff0c;具体不在此篇展开&#xff09;。 学习基本路线&#xff…

体育数据API纳米篮球数据API:篮球数据接口文档API示例⑧

纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口&#xff0c;无请求次数限制&#xff0c;可按需购买&#xff0c;接口稳定高效&#xff1b; 覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。纳米数据API2.0版本…

【笔记】I/O总结王道强化视频笔记

文章目录 从中断控制器的角度来理解整个中断处理的过程复习 处理器的中断处理机制**中断驱动I/O方式** printf——从系统调用到I/O控制方式的具体实现1轮询方式下输出一个字符串(程序查询)中断驱动方式下输出一个字符串中断服务程序中断服务程序与设备驱动程序之间的关系 DMA方…

Pywinauto,一款 Win 自动化利器!

1.安装 pywinauto是一个用于自动化Python模块&#xff0c;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;可以通过Pywinauto遍历窗口&#xff08;对话框&#xff09;和窗口里的控件&#xff0c;也可以控制鼠标和键盘输入&#xff0c;所以它能做的事情比之前介…

【STM32单片机_(HAL库)】4-2-1【定时器TIM】定时器输出PWM实现呼吸灯实验

1.硬件 STM32单片机最小系统LED灯模块 2.软件 pwm驱动文件添加定时器HAL驱动层文件添加GPIO常用函数定时器输出PWM配置步骤main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "pwm.h"int main(void) {HA…

python全栈学习记录(二十二)多态性、封装、绑定方法与非绑定方法

多态性、封装、绑定方法与非绑定方法 文章目录 多态性、封装、绑定方法与非绑定方法一、多态性二、封装三、绑定方法与非绑定方法 一、多态性 多态指的是同一种事物的多种形态&#xff0c;如水&#xff1a;冰、水蒸气、液态水&#xff0c;又如动物&#xff1a;猫、狗、猪。 多…

刷题 二叉树

面试经典 150 题 - 二叉树 104. 二叉树的最大深度 广度优先遍历 class Solution { public:// 广度优先遍历int maxDepth(TreeNode* root) {if (root nullptr) return 0;queue<TreeNode*> que;que.push(root);int result 0;while (!que.empty()) {result;int num que…