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

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

3天内不再提示

C语言中的悬空指针和野指针是什么意思?

单片机与嵌入式 来源:单片机与嵌入式 2023-02-09 17:20 次阅读

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

1 悬空指针

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

b32f37aa-a795-11ed-bfe3-dac502259ad0.png

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

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

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

b33fbbf2-a795-11ed-bfe3-dac502259ad0.png

这么做的好处是一旦再次使用被释放的指针 p,就会立刻引发“段错误”,程序员也就能立刻知道应该修改C语言代码了。

2野指针

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

b34a48ec-a795-11ed-bfe3-dac502259ad0.png

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

b356a218-a795-11ed-bfe3-dac502259ad0.png

这两点内容,是C语言比较重要的内容,希望大家在编码的时候一定要注意。

审核编辑:汤梓红

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

    关注

    8

    文章

    2767

    浏览量

    72765
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128651
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70361
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66767

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

文章出处:【微信号:单片机与嵌入式,微信公众号:单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中悬空指针和野指针

    提起C语言,大部分开发者很自然就会想到指针二字。没错,作为C的核心和灵魂,它的地位咱们就不再赘述了。
    发表于 07-20 11:58 877次阅读

    C语言中指针函数和函数指针的概念及应用示例

    在C语言中指针函数和函数指针是强大且常用的工具。它们允许我们以更灵活的方式处理函数和数据,进而扩展程序的功能。
    发表于 08-16 16:14 343次阅读

    C语言中多级指针的概念和使用方法

    多级指针在C语言中是一种特殊的指针类型,它可以指向其他指针指针
    发表于 08-16 16:16 308次阅读

    C语言中指针和野指针的概念及产生原因

    在C语言中指针是一种非常强大和灵活的工具,但同时也容易引发一些问题,其中包括空指针和野指针
    发表于 08-16 16:18 399次阅读

    C语言中指针的基本概念和用法

    在C语言中指针是一项重要的概念,它允许我们直接访问和操作内存地址。
    发表于 08-17 15:30 517次阅读

    于“悬空指针”和“指针”的视频

    C语言编程语言指针
    jf_97106930
    发布于 :2022年09月04日 11:15:48

    c语言指针详解

    1.指针简介 指针C语言中广泛使用的一种数据类型。 运用指针编程是C
    发表于 03-26 09:51

    C语言中指针是什么?如何规避指针

    C语言中指针是什么?有哪几种类型?指针有何作用?如何规避指针
    发表于 02-25 06:47

    C语言中数字怎么转成指针

    C语言中数字怎么转成指针,比如我要去内存地址为0x100的内容,用一句话表达,不如uchar a=?我要问号等于0x100地址的内容
    发表于 10-31 06:29

    C语言中指针的介绍非常详细

    C语言中指针的介绍非常详细 C语言中指针的介绍非常详细
    发表于 12-25 10:39 57次下载

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

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

    C语言中的野指针是怎么来的?

    (栈)、malloc函数申请堆内存返回的地址(但未使用free释放,是在堆空间动态申请) 需要注意的是,野指针不是NULL指针,通常NULL指针可以使用if语句来判断,但是C语言中没有
    的头像 发表于 06-01 16:43 2326次阅读

    C语言中指针(重点)超详细

    C语言中指针1、指针是什么2、指针指针类型2.1、指针 + - 整数2.2、
    发表于 01-13 14:10 11次下载
    C<b class='flag-5'>语言中</b>的<b class='flag-5'>指针</b>(重点)超详细

    C语言中什么是指针数组

    在C语言中一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。
    的头像 发表于 03-10 15:26 1276次阅读

    简述C语言中指针重点

    在C语言中一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址,其概念与以前类似,只是返回的值的类型是指针类型。
    的头像 发表于 03-10 15:28 424次阅读