【C++】 野指针及其危害

引言:小白在初期敲代码时最可能碰到的问题之一估计就是野指针了,因为它在写程序的时候一不注意就写出来了,且不容易被发现,调试半天可能也不会出结果。去找大佬一看,其实就是一个很简单的野指针问题,那么我们今天就来学习一下关于野指针的问题,以及怎么在敲代码时如何规避它。

什么是野指针呢?
答:“野指针”并不是NULL指针,而是在定义上没有初始化,值为随机,又或者是指向了已经被释放内存了的指针或是指向越界的变量作用域的指针。

野指针的成因

  • ①指针变量没有被初始化。首先我们要知道,任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的,可能会指向任意位置。所以,指针变量在创建时的最开始就应该及时对其初始化,要么将其置为NULL,要么让它指向一块合法的内存。
  • ②指针ptr被free或者delete之后,只是释放了ptr所指向的内存,而没有把指针ptr干掉,且没有及时被置为NULL,当后边用到它时,以为它任然是合法的。
  • ③指针操作超越了变量所在的作用域,意思是返回了指向栈内存的指针或引用,因为栈内存在函数结束时就会被释放掉。

野指针的危害
下面我们通过一段代码来分析一下:

1  short *bufptr;
2  short  bufarray[20];
3  short  var0X20;
4  *bufptr=var;
5  bufarray[0]=var;

解析

  • ①代码第1行,没有问题,声明了一个short*型的指针,并且没有初始化,为后边买下炸弹。
    ②代码第2行,没有问题,声明了一个20个元素的数组,每个元素都是short型的。
    ③代码第3行,没有问题,声明了short类型的变量var,并且初始化为0X20。
    ④代码第4行,有错误,此处将bufptr指针指向的内容赋值为var变量的值,因为bufptr在最开始并没有被初始化,是一个“野指针”,因此对他指向的内容操作是非常危险的,会导致程序崩溃。为了杜绝这种错误操作,我们可以将bufptr进行正确初始化,应该将第一行改为short *bufptr=(short*)malloc(sizeof(short)); ⑤代码第5行,没有问题。把bufarray的第一个元素赋值为变量var的值。

野指针危害总结

  • 1.指向不可访问的一段地址,触发段错误。
  • 2.指向一个可用的,但是正在被使用的空间,如果在此时对这段空间解引用后,对其加以修改或者释放,但是这段空间正在被使用,这是非常危险的操作,程序会崩溃,数据也会可能被破坏。

C/C++语言中使用指针的规则,避免野指针

  • 1、用malloc申请了内存之后,应该立即检查指针值是否为NULL,防止使用值为NULL的指针。
  • 2、动态申请操作必须和释放操作匹配,防止内存泄露和多次释放。谁申请,谁释放。
  • 3、牢记数组的长度,防止数组越界操作,考虑使用柔性数组,使用结构体struct来定义柔性数组。
  • 4、free指针之后必须立即赋值为NULL。

【C++】野指针及其危害相关推荐

  1. 野指针的危害—引用和指针(四)

    目录 "野指针"的定义 野指针的成因 野指针变量不可以被赋值 野指针不能用于变量值的互换 "野指针"的定义 野指针不是NULL指针,而是指向垃圾内存的指针.野指 ...

  2. 指针 是否相同_c专题之指针---野指针和空指针解析

    ----在上一篇c专题指针文章中,我们介绍了什么是指针,文章里面从普通变量进而引出指针的概念,这样对指针的理解有一定的帮助(其实最好的理解,就是要明白硬件里面的内存原理,这是理解指针最好的地方,就好比 ...

  3. 面试题:什么是野指针?产生野指针的原因?

    一.什么是野指针 野指针是指向位置随机的.不正确的指针,系统无法对其进行操作: 二.野指针的危害 野指针指向的位置是随机的, 危害也是随机的,不一定会产生错误.若程序产生错误,一般为内存泄露导致程序中 ...

  4. 指针、野指针、指针常量、常量指针

    指针 概念 指针是什么? 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量 ...

  5. c++空指针和野指针

    空指针: 定义:是一个被赋值为NULL的指针,它不指向任何的对象或者函数. 注意事项: 1.使用指针的第一件事就是需要看这个指针是否是空指针(坚决不能使用空指针,否则程序就会崩.意思就是:为一个指针赋 ...

  6. C/C++总结笔记——指针1:野指针、空指针(NULL和nullptr)、悬空指针、智能指针

    C/C++中有几种指针相关的概念,只知道有这样的概念,但HR一问就露馅,这里进行总结方便复习. 1.野指针 1.指针定义时未被初始化:指针在被定义的时候,如果程序不对其进行初始化的话,它会指向随机区域 ...

  7. 野指针的产生及其危害

    我们在学习C语言的时候,经常说道野指针的问题,那么到底什么是野指针呢?我们又是如何创造出野指针的呢??野指针会产生什么样的影响呢???下面就来一一解答这3个问题. 什么是野指针 野指针:我们已经理解指 ...

  8. C和C++中的野指针问题

    文章目录 1 C和C++中的野指针问题 1.1 野指针的概念 1.2 野指针的由来 1.3 杜绝野指针的基本原则 2 C和C++中的常见内存错误 2.1 常见内存错误 2.2 内存操作的基本规则 1 ...

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

    一.定义 野指针(Wild Pointer):没有初始化的指针. 悬空指针(Dangling Pointer):指向的内存已经释放. 二.危害 由于指向的是不安全不可控的区域,任何情况都有可能发生,比 ...

最新文章

  1. buck变换器设计matlab_2.5V/2A 高质量电源设计
  2. 物联网技术周报第 143 期: Unity 3D 和 Arduino 打造虚拟现实飞行器
  3. centos7 安装 JDK环境
  4. PHP特级课视频教程_第三十四集 Mongodb性能优化_李强强
  5. 网络协议:ARP协议
  6. sudo执行脚本找不到环境变量
  7. 【信息论】信源与信源熵(一)
  8. 太阳直射点纬度计算公式_利用旗杆影子——判断日出日落、季节、昼长、经纬度、太阳高度角...
  9. 快讯:迈阿密在建公寓计划为飞行汽车推出天空港口
  10. 上海车牌拍牌辅助工具
  11. java接收端怎么收不到_java后端为什么接受不到前端发送的数据
  12. mac系统用键盘操作菜单栏
  13. try 、catch、finally用法总结
  14. 软考高项论文写作指南分享
  15. Android—调用高德地图显示定位蓝点
  16. Arduino控制PCF8574
  17. 【云原生】阿里云容器镜像服务产品ACR EE
  18. 排气控制系统--中英文翻译
  19. 研究生考试又来到,网上确认证件照怎么拍?
  20. 占空比输出程序c语言,关于51单片机输出频率和占空比可调的PWM波程序问题

热门文章

  1. 如何自学插画?零基础要知道的技巧!
  2. 旧作 一剪梅•秋夜
  3. 25家往昔明星网站“血泪史” 教你如何过冬
  4. 树莓派GPIO和PWM控制教程
  5. 计算机在维氏硬度的应用,华银显微维氏硬度计HVS-1000A使用方法
  6. 计算机网络笔记及思维导图(1)——概述
  7. 江苏计算机一级ppt视频,(江苏省计算机一级.ppt
  8. 加勒比海盗——最优装载问题
  9. 学海无涯!分享一些行业经验,最新整理
  10. 运用人性,七情六欲聊运营