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

    提起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语言比较重要的内容,希望大家在编码的时候一定要注意。

    声明:

    本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

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

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

    悬空指针

    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语言代码了。

    野指针

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

    void *p;
    // 此时 p 是“野指针”
    

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

    void *p = NULL;
    void *data = malloc(size);
    

    -END-

    声明:

    本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

    展开全文
  • 单片机IO口悬空,高阻态究竟是什么意思

    万次阅读 多人点赞 2019-03-23 00:08:23
    悬空,顾名思义,就是不接任何器件啦 高阻态:无上拉和无下拉,对外表现出电平不确定性 不是所有单片机都支持三态输出。三态输出一般由寄存器控制,需进行配置。 高阻态既然无确定电平,怎么能做输出呢?把一个...

    悬空,顾名思义,就是不接任何器件啦
    高阻态:无上拉和无下拉,对外表现出电平不确定性
    不是所有的单片机都支持三态输出。三态输出一般由寄存器控制,需进行配置。

     

    高阻态既然无确定电平,怎么能做输出呢?把一个端口置为高阻态,相当于该端口从电路中断开(仅对输出来说),比如在一个通信线上挂了几个端口,将一个端口置为高阻态,就意味着该端口不会影响到该通信线的电平变化,但还是可以读取端口的电平。一般高阻态都是作为模拟量输入的,因为高阻态不会影响到输入的电平,可以准确的读取模拟量。

    ===========================================================================================

    上拉电阻&下拉电阻&高阻态

    上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用。下拉同理。

    上拉电阻是用来解决总线驱动能力不足时提供电流的,一般说法是拉电流。下拉电阻是用来吸收电流的,也就是我们通常所说的灌电流。提升电流和电压的能力是有限的,且弱强只是上拉电阻的阻值不同。

    当GPIO引脚处于高阻态时,它的电平状态由上/下拉电阻确定。 If the port pull-up register is enabled then the pull-up resisters work without pin’s functional setting(input, output, DATAn, EINTn and etc)。

    三态门,是指逻辑门的输出除有高、低电平两种状态外,还有第三种状态——高阻状态的门电路。具备这三种状态的器件就叫做三态(门,总线,...)。         

    如果你的设备端口要挂在一个总线上,“必须通过三态缓冲器”。因为在一个总线上同时只能有一个端口作输出,这时其他端口必须在高阻态,同时“可以输入这个输出端口的数据”。所以你还需要有总线控制管理, 访问到哪端口,那个端口的三态缓冲器才可以转入输出状态,这是典型的三态门应用。 如果在线上没有两个以上的输出设备, 当然用不到三态门。

    高阻态,指的是电路的一种输出状态,既不是高电平也不是低电平。高阻态只有电容效应,没有电阻效应;阻抗很高很高,相当于断开。如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定。

    悬空和高阻态的区别 悬空(浮空,floating):就是逻辑器件的输入引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。一般实际运用时,引脚不建议悬空,易受干扰。 高阻态:从逻辑器件内部电路结构来说,就是其输出电阻很大,该状态即不是高电平,也不是低电平。当三态门处于高阻态时,无论该门的输入如何变化,都不会对其输出有贡献。  

    ====================================================================

    高阻态这是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定。

      高阻态的实质:

      电路分析时高阻态可做开路理解。你可以把它看作输出(输入)电阻非常大。他的极限可以认为悬空。也就是说理论上高阻态不是悬空,它是对地或对电源电阻极大的状态。而实际应用上与引脚的悬空几乎是一样的。

      高阻态的意义:

      当门电路的输出上拉管导通而下拉管截止时,输出为高电平;反之就是低电平;如上拉管和下拉管都截止时,输出端就相当于浮空(没有电流流动),其电平随外部电平高低而定,即该门电路放弃对输出端电路的控制 。

      典型应用:

      1、在总线连接的结构上。总线上挂有多个设备,设备于总线以高阻的形式连接。这样在设备不占用总线时自动释放总线,以方便其他设备获得总线的使用权。 

      2、大部分单片机I/O使用时都可以设置为高阻输入,如凌阳,AVR等等。高阻输入可以认为输入电阻是无穷大的,认为I/O对前级影响极小,而且不产生电流(不衰减),而且在一定程度上也增加了芯片的抗电压冲击能力。

      高阻态常用表示方法

      高阻态常用字母 Z 表示。

     

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

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

     

    悬空指针

    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语言代码了。

     

    野指针

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

    void *p;

    // 此时 p 是“野指针”

    因为“野指针”可能指向任意内存段,因此它可能会损坏正常的数据,也有可能引发其他未知错误,所以C语言中的“野指针”危害性甚至比“悬空指针”还要严重。

    在实际的C语言程序开发中,定义指针时,一般都要尽量避免“野指针”的出现(赋初值):

    void *p =NULL;

    void *data =malloc(size);

    好了,关于“悬空指针”和“野指针”的问题就分享到这里吧,希望对大家有所帮助,感谢各位的耐心阅读!


    如果你想要获取更多C语言、C++、Windows以及QT的知识!

    小编有一个免费的C/C++编程学习交流俱乐部,【点击进入】

    还有编程学习文件(源码,项目实战教学视频以及给小白的零基础教程),欢迎初学者和正在进阶中的小伙伴们!

    展开全文
  • 关注、星标公众号,不错过精彩内容素材来源:网络编辑整理:strongerHuang提起C语言大部分开发者很自然就会想到指针二字,没错,作为C核心和灵魂,它地位咱们就不再赘述了,今天我...
  • STM32 关于GPIO问题

    2020-03-25 16:33:57
    答:既不是高电平也不是低电平,悬空的意思是没有使用的状态。2、有关stm32f103 端口复用的问题? 问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子: PB6 PB7默认情况下是做普通IO使用的,...
  • C语言中定义指针==NULL的意思

    千次阅读 2016-10-27 18:16:09
    用于指将指针 悬空(不指向任何位置) int *p=NULL;
  • 各位,前段时间我们有推文介绍过野指针和悬空指针,那C中还有一个叫做空指针名词,它究竟是指什么呢,今天就跟大伙聊聊这个空指针。我们讲,每一种指针类型都有一个特殊值——“空指针”。它与同类型其他所有...
  • 而实际应用上与引脚的悬空几乎是一样。 高阻态意义: 当门电路输出上拉管导通而下拉管截止时,输出为高电平;反之就是低电平;如上拉管和下拉管都截止时,输出端就相当于浮空(没有电流流动),其电平随外部电平...
  • 三极管c b e o意义

    2020-09-19 17:16:09
    c是集电极,b是基极,e是发射极 ,o是开路,悬空断开的意思。 Icbo指在CB之间加一个电压,测CB之间的电流,同时E脚悬空。 Iceo指在CE之间加一个电压,测CE之间的电流,同时B脚悬空
  • 可导与连续关系

    2019-10-07 07:03:05
    可导在几何图像上面理解,应该是有切线的意思.有切线就是这个曲线在很小的一段局部会很接近直线,局部越小越接近直线,所以要求这个函数曲线不但不能有断开的悬空的点,还要求这个函数曲线平滑,不能突兀(比如一个很尖的...
  • 说说熟悉又陌生GPIO

    2021-01-19 21:22:12
     讲了这么多,相信不懂人还是一头雾水,咱们对着看看GPIO怎么用至于上拉、下拉、悬空、高阻、开漏、推挽之类概念,可以以后再慢慢琢磨。  GPIO简单用法  输出控制信号  GPIO控制LED灯...
  • 意思相对简单不做详细介绍。 上拉输入时IO口在悬空状态下为高电平。 下拉输入时IO口在悬空状态下为低电平。 浮空输入时IO在悬空状态时相当于高阻状态。 IO口输入模式内部结构如下图所示(参考): 二、上拉电阻、...
  • HAL学习随笔(2)

    2021-02-05 12:22:27
    上拉电阻的意思就是将不确定信号通过电阻接到高电平,这样在输入信号在没有其他触发的情况下,他是高电平,反之,下拉低电平也是这个道理。 上拉和下拉可以防止接入电流的瞬间产生的值不稳定,避免引脚悬空引起的误...
  • 当然类似还有: "上海自来水水来自海上, 山西悬空寺寺空悬西山". 回文是什么意思? 就是把内容反过来读也是和原来一样, 譬如 abccba, xyzyx, 这些都是回文. 然而我们更感兴趣是在一个英文字符串 L 中, 怎么找...
  • 杂项

    2019-03-14 12:17:00
    1.电路中VD是什么意思? GB7159《电气技术中文字符号制订通则》中规定:(在电路图中)二极管、三极管、电子管...Floating就是悬空了,不用时,不用做处理,N/A就是这个管脚不会出现不使用情况。Floating(i...
  • Rotate problem

    2013-11-13 11:33:30
     在一个NXN点阵中下棋,棋盘是直立,所有棋子都会从上往下落,不会悬空在某一位置,棋子分为红色‘R’和蓝色‘B'两种,如下图,其中左边为正确棋盘,右边为错误棋盘,在右边图中,棋子B应该要往下落一格...
  • AD学习小记

    2021-05-29 19:32:22
    根据英文的意思是网络标号悬空和单端网络,但是我仔细看我的原理图,本来以为是网络标签的电气属性不对,重新放置网络标签后,发现还是同样的问题,苦思冥想找不到其问题所在。但在无意中挪动了一下32芯片,发现32和...
  • 我看了一些博主博客才知道这是什么意思,要用什么思路去解答,奈何鄙人没做过欧拉回路问题,都不知道还能用这个知识来解决题目。 首先要了解什么是欧拉回路,在这里我就不赘述了,直接用结论: 对于有向图来说
  • 电路原理图中“NC“是什么意思

    千次阅读 2021-04-19 12:15:54
    就是说芯片这个引脚在电路中是“悬空状态”,与其他任意点都没有连接。 2、在模拟电路中,nc是常闭符号。NC是英文normally close缩写,意思是指在不通电时处于闭合导通状态触点,通常称为常闭触点。常开...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

悬空的意思