0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简述C语言中什么是悬空指针和野指针

GReq_mcu168 来源:哔哩哔哩 作者:C语言_编程俱乐部 2021-03-18 11:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词:“悬空指针”和“野指针”。

1 悬空指针

C语言中的指针可以指向一块内存,如果这块内存稍后被操作系统回收(被释放),但是指针仍然指向这块内存,那么,此时该指针就是“悬空指针”。下面这段C语言代码是一个例子,请看:

void *p = malloc(size);assert(p);free(p); // 现在 p 是“悬空指针” C语言中的“悬空指针”会引发不可预知的错误,而且这种错误一旦发生,很难定位。这是因为在 free(p) 之后,p 指针仍然指向之前分配的内存,如果这块内存暂时可以被程序访问并且不会造成冲突,那么之后使用 p 并不会引发错误。

最难调试的 bug 总是不能轻易复现的 bug,对不?

所以在实际的C语言程序开发中,为了避免出现“悬空指针”引发不可预知的错误,在释放内存之后,常常会将指针 p 赋值为 NULL:

void *p = malloc(size);assert(p);free(p); // 避免“悬空指针”p = NULL; 这么做的好处是一旦再次使用被释放的指针 p,就会立刻引发“段错误”,程序员也就能立刻知道应该修改C语言代码了。

2野指针

上面我们讲的“悬空指针”是指向被释放内存的指针,“野指针”则是不确定其具体指向的指针。“野指针”最常来自于未初始化的指针,例如下面这段C语言代码:

void *p;// 此时 p 是“野指针” 因为“野指针”可能指向任意内存段,因此它可能会损坏正常的数据,也有可能引发其他未知错误,所以C语言中的“野指针”危害性甚至比“悬空指针”还要严重。在实际的C语言程序开发中,定义指针时,一般都要尽量避免“野指针”的出现(赋初值):

void *p = NULL;void *data = malloc(size);这两点内容,是C语言比较重要的内容,希望大家在编码的时候一定要注意。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144649

原文标题:C语言中的“悬空指针”和“野指针”是什么意思?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C指针的妙用分享

    1、你知道吗?指针其实是个天生的数学家!看这个: #include int main() { int arr[] = {10, 20, 30, 40, 50}; int *p = arr
    发表于 11-17 06:35

    函数指针的六个常见应用场景

    函数指针在嵌入式开发中有着广泛的应用,它让代码更加灵活,减少冗余,提高可扩展性。很多时候,我们需要根据不同的情况动态调用不同的函数,而函数指针正是实现这一需求的重要工具。本文将介绍六个常见的函数指针
    的头像 发表于 04-07 11:58 1139次阅读
    函数<b class='flag-5'>指针</b>的六个常见应用场景

    全套C语言培训资料—PPT课件

    全套C语言培训资料,共427页,13个章节:C语言概述、程序的灵魂—算法、数据类型 & 运算符与表达式、顺序程序设计、选择结构程序设计、循环控制、数组、函数、预处理命令、
    发表于 03-12 14:50

    RTOS中的本地存储指针使用

    本地存储指针是RTOS中的一个重要特性,增强了任务管理和数据处理能力。在RTOS上下文中,本地存储是指存储在本地的特定任务或对象的数据。通常与任务本地存储(Task Local Storage,TLS)有关,其中数据存储在任务控制块(TCB)中,允许每个任务具有私有的、特定于任务的变量。
    的头像 发表于 02-28 16:33 1176次阅读
    RTOS中的本地存储<b class='flag-5'>指针</b>使用

    指针式万用表测量电压技巧

    在电子维修和电气工程领域,准确测量电压是至关重要的。指针式万用表因其直观的读数和可靠性而广受欢迎。 1. 了解指针式万用表 在开始测量之前,了解万用表的基本构造和功能是必要的。指针式万用表通常有两个
    的头像 发表于 01-23 09:32 2582次阅读

    指针式万用表与数字万用表对比

    在电子维修和测试领域,万用表是不可或缺的工具。它们能够测量电压、电流、电阻等多种电气参数。市场上主要有两种类型的万用表:指针式万用表和数字万用表。 指针式万用表 工作原理 指针式万用表,也称为模拟
    的头像 发表于 01-23 09:31 4059次阅读

    指针式万用表测量电流的方法

    一、指针式万用表简介 指针式万用表是一种模拟电子测量仪器,它通过一个可移动的指针来显示测量结果。这种万用表因其直观、易于操作而受到许多电子爱好者和技术人员的喜爱。指针式万用表可以测量直
    的头像 发表于 01-23 09:25 4482次阅读

    指针式万用表功能介绍

    在电子工程和电气维修领域,万用表是不可或缺的工具之一。它能够快速测量电路中的电压、电流和电阻等参数,帮助工程师和技术人员诊断和修复电路问题。 指针式万用表的基本原理 指针式万用表的工作原理
    的头像 发表于 01-23 09:12 4006次阅读

    指针式万用表读数技巧

    1. 了解指针式万用表的基本构造 在使用指针式万用表之前,了解其基本构造是非常重要的。指针式万用表主要由表头、量程选择旋钮、插孔和表盘组成。表头是测量的核心部分,它通过指针的偏转来显示
    的头像 发表于 01-22 18:20 2770次阅读

    指针式万用表和数字万用表哪个好

    在电子测量领域,万用表是工程师和技术人员不可或缺的工具。它们能够测量电压、电流、电阻等多种电气参数。市场上主要有两种类型的万用表:指针式万用表和数字万用表。 1. 指针式万用表 1.1 工作原理
    的头像 发表于 01-22 17:28 7880次阅读

    指针式万用表使用指南

    一、指针式万用表简介 指针式万用表是一种传统的电子测量工具,因其表头指针的摆动来显示测量结果而得名。与数字万用表相比,指针式万用表在某些情况下能提供更直观的读数,尤其是在测量快速变化的
    的头像 发表于 01-22 17:25 3303次阅读

    指针式万用表测量精度比较

    指针式万用表的核心是一个可变电阻器(分压器)和一个可动的指针。当测量电压或电流时,通过分压器的电阻值会改变,从而改变通过指针的电流,使指针在刻度盘上移动。
    的头像 发表于 01-22 17:23 2387次阅读

    指针被释放后就变成了空指针

    指针被释放后,是不是就变成了空指针?有好多同学提出了这样的问题。 借用《C专家编程》上面的一段代码,可以很好的解释这个问题。     #include int main(){ char *s
    的头像 发表于 01-22 09:23 655次阅读

    EE-62:在C语言中访问短字内存

    电子发烧友网站提供《EE-62:在C语言中访问短字内存.pdf》资料免费下载
    发表于 01-07 14:02 0次下载
    EE-62:在<b class='flag-5'>C</b><b class='flag-5'>语言中</b>访问短字内存

    EE-128:C语言中的DSP:从C调用汇编类成员函数

    电子发烧友网站提供《EE-128:C语言中的DSP:从C调用汇编类成员函数.pdf》资料免费下载
    发表于 01-07 13:48 0次下载
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>语言中</b>的DSP:从<b class='flag-5'>C</b>调用汇编类成员函数