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

    文章

    3019

    浏览量

    74001
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136680
  • 指针
    +关注

    关注

    1

    文章

    480

    浏览量

    70551
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68519

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

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

收藏 人收藏

    评论

    相关推荐

    C语言中悬空指针指针

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

    C语言中void指针的基本认识及典型应用

    C语言中,*类型就是指针类型,比如 int *p,double *q,虽然是不一样的指针,但是大小却一样sizeof(p) == sizeof(q),因为它们都是同一种类型*类型的。
    发表于 02-01 09:26 1097次阅读

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

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

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

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

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

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

    C语言指针电子教程

    本资料是一份不错的关于C语言指针的电子教程,希望对大家有所帮助... 指针简介 指针C
    发表于 07-30 16:00 77次下载

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

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

    c语言函数指针定义,指针函数和函数指针的区别

     往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言中函数指针
    发表于 11-16 15:18 3624次阅读

    基于C语言中指针的基本用法解析

    C语言中其它的知识都学得可以,唯独指针搞不懂。如果是这样,我可以很负责的告诉你,对于这门编程语言,你等于是没学。所以学好指针对于初学者是非
    的头像 发表于 01-09 15:12 4793次阅读

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

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

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

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

    C语言初识指针

    目录1. 指针是什么?2. 指针指针类型3.指针3.1
    发表于 12-31 19:57 26次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>初识<b class='flag-5'>指针</b>

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

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

    C语言中什么是指针数组

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

    简述C语言中指针重点

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