C/Cpp / 野指针和悬空指针

本文介绍了野指针和悬空指针的概念及它们可能带来的危害,并提供了避免这两种指针问题的传统方法和现代C++中的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、定义

  1. 野指针(Wild Pointer):没有初始化的指针。
  2. 悬空指针(Dangling Pointer):指向的内存已经释放。

二、危害

由于指向的是不安全不可控的区域,任何情况都有可能发生,比如:崩溃、执行结果错误、系统崩溃等。

三、如何避免

传统方法:每一个指针必须初始化为 null,可以避免 野指针 的产生。但是对于悬空指针来说就比较难处理,只能每次 delete 内存之后将指针置为 null,但是其他指向该内存的指针如果有遗漏没有置为 null 的则很容易造成悬空指针。

现代 C++ 基本上没有了上述问题,使用容器 shared_ptr 。该容器初始化时就将指针置为了 null,这样就避免了野指针;传入内存地址之后,智能指针析构时判断该内存块的引用计数,如果为 0 则自动释放内存,因为不会有真正的裸指针在代码中,也就无从谈起悬空指针,所有对指针的操作都是对对象(容器)而非指针,这样就避免了悬空指针的存在。

 

(SAW:Game Over!)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值