首页 > 其他分享 >什么是野指针和悬空指针?

什么是野指针和悬空指针?

时间:2024-09-13 10:23:01浏览次数:13  
标签:指向 int 悬空 什么 内存 Pointer 指针

目录

1. 野指针(Wild Pointer)

2. 悬空指针(Dangling Pointer)


野指针悬空指针都是在C/C++编程中常见的错误,它们会导致程序行为不可预测,甚至引发崩溃或安全漏洞。以下是对两者的详细解释和总结表格:

1. 野指针(Wild Pointer)

  • 定义: 野指针是一个没有被初始化的指针,指向一个未知的或随机的内存位置。
  • 产生原因: 当指针变量声明后没有被赋予有效的内存地址时就会成为野指针。
  • 危害: 访问野指针会导致程序出现不确定的行为,如崩溃、数据损坏,甚至可能引发安全漏洞。
  • 示例:
int *p;  // 未初始化的指针,即野指针
*p = 10; // 未定义行为

2. 悬空指针(Dangling Pointer)

  • 定义: 悬空指针是一个曾经指向有效内存位置的指针,但该内存已被释放或超出了其作用域。
  • 产生原因: 当指针指向的内存被释放(如deletefree操作)或指向的局部变量超出作用域时,指针成为悬空指针。
  • 危害: 使用悬空指针访问已释放的内存可能导致程序崩溃、内存泄漏、或数据损坏。
  • 示例:
int *p = new int(10);
delete p; // p 成为悬空指针
*p = 20;  // 未定义行为

通过正确初始化指针并在释放内存后将指针置为nullptr,可以有效防止野指针和悬空指针的问题。

标签:指向,int,悬空,什么,内存,Pointer,指针
From: https://blog.csdn.net/weixin_47151388/article/details/142203146

相关文章

  • rfc3550讲了什么?
    RFC3550是关于实时传输协议(RTP)及其控制协议(RTCP)的官方文档,详细描述了这两个协议的基本内容、报文格式、传输规则、应用场景以及相关的扩展协议。以下是RFC3550内容的详细解析:一、实时传输协议(RTP)1.基本概述定义:RTP是一种网络协议,用于在互联网上传输具有实时属性的数据,如音频、视......
  • 常量指针、指针常量及常量指针常量
    目录1.常量指针(PointertoConstant)2.指针常量(ConstantPointer)3.常量指针常量(ConstantPointertoConstant)常量指针:指针指向的值不能改,但指针本身可以指向其他地址。指针常量:指针本身不能改,但可以修改指向的值。常量指针常量:指针和指针指向的值都不能改。常量指......
  • MQTT 是什么以及它的工作原理
    平时学习MQTT或调试设备,推荐一款MQTT工具:MQTTAssistantMQTT是什么以及它的工作原理 #本文介绍了MQTT协议。MQTT代表消息队列遥测传输(MessageQueuingTelemetryTransport),是一种适用于物联网设备之间通信的简单消息传递协议。什么是MQTT? #MQTT代表消息队列......
  • Comfyui喂饭级教程:为什么要学Comfyui?
    前言:在当今快速发展的社会,掌握一项实用的技能对于安身立足至关重要。很多人推荐学习编程、数据分析等技术,但其中最引人瞩目的当属人工智能(AI)。特别是AI绘画,融合了艺术与科技,成为了当今最具潜力的领域之一。通过学习AI绘画,你不仅可以探索创意的无限可能,还能在科技驱动的市场......
  • token是用来鉴权的,那session是用来干什么的?
    使用JWT进行用户认证和授权,而Session在一定程度上起到了辅助作用。让我们详细讨论JWT和Session在这种结合模式中的各自作用以及为什么需要Session。JWT的作用用户认证: JWT包含了用户的身份信息和权限信息,客户端每次请求时将JWT发送给服务器,服务器通过验证JWT来确认用户身份。无状......
  • 为什么H.266未能普及?EasyCVR视频编码技术如何填补市场空白
    H.266,也被称为VersatileVideoCoding(VVC),是近年来由MPEG(MovingPictureExpertsGroup)和ITU(InternationalTelecommunicationUnion)联合开发并发布的新一代国际视频编码标准。该标准于2020年定稿,旨在提高视频压缩效率,特别是在4K和8K超高清视频领域。然而,尽管H.266拥有诸多技术优势......
  • 内存耗尽后,Redis会发生什么?
    前言 作为一台服务器来说,内存并不是无限的,所以总会存在内存耗尽的情况,那么当Redis服务器的内存耗尽后,如果继续执行请求命令,Redis会如何处理呢?  2内存回收 使用Redis服务时,很多情况下某些键值对只会在特定的时间内有效,为了防止这种类型的数据一直占有内存,我们可以......
  • 当谈论DDD到底在谈论什么
    你好,今天简单写写DDD领域驱动设计。字少总结版什么是DDD:DDD是将业务领域概念和规则映射到软件设计的方法,能打通产品、设计、编码人员的信息壁垒。DDD、ER和UML三者关系:三者在软件开发中相互关联但侧重点、范围和目的不同,DDD可结合UML,ER作用可弱化。DDD的核心概念有哪些:包括事......
  • 智能指针unique_ptr<>创建的过程
    智能指针unique_ptr<>创建的过程两种初始化方式的比较std::unique_ptr可以通过两种方式进行初始化:直接构造或者使用std::make_unique()。它们之间的区别如下:直接构造std::unique_ptr:你可以通过直接构造来创建一个unique_ptr,如下:std::unique_ptr<int>ptr(newint(42));......
  • 指针初阶及使用
    指针的使用指针是什么指针和指针类型野指针指针运算指针和数组二级指针指针数组指针是什么我们对指针的理解大多数就是地址,那究竟是不是呢?指针是内存中一个最小单元的编号,也就是地址平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量我们想要了解......