美文网首页
C语言“悬空指针”和“野指针”究竟是什么意思?一文了解透彻!

C语言“悬空指针”和“野指针”究竟是什么意思?一文了解透彻!

作者: 折扇戏美人_a48e | 来源:发表于2020-05-27 15:15 被阅读0次

各位,提起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++编程学习交流俱乐部,【点击进入】

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

相关文章

  • C语言“悬空指针”和“野指针”究竟是什么意思?一文了解透彻!

    各位,提起C语言我们很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲...

  • 什么是野指针?什么是僵尸对象?

    野指针与僵尸对象 1. 野指针 1>C语言中的野指针:一个指针变量指向一块随机的空间,这个指针就是野指针当我们声明...

  • C语言-3、堆栈、野指针、悬空指针、动态开辟

    栈区:占用内存大小 最大值: 大概 2M 大于2M会栈溢出 跟平台有关系 堆区:占用内存大小 最大值: 大概8...

  • 如何Check僵尸对象

    野指针和僵尸对象 野指针: C语言:当我们声明一个指针变量,没有为这个指针变量赋初始值,这个指针变量的值是一个垃圾...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • iOS assign,weak,strong等属性和引用计数

    先介绍指针相关的几个概念(看有的书上介绍下面的未初始化的叫野指针,野指针叫悬空指针,可能和其它平台理解有所差异,但...

  • Xcode崩溃原因汇总

    调用野指针 野指针定义:C语言: 当我们声明1个指针变量,没有为这个指针变量赋初始值.这个指针变量的值是1个垃圾指...

  • C语言基础及指针⑤动态内存分配

    接续上篇C语言基础及指针④函数指针 在上一篇我们了解C语言中的函数及函数指针 , 使用函数指针 , 模拟了网络请求...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

网友评论

      本文标题:C语言“悬空指针”和“野指针”究竟是什么意思?一文了解透彻!

      本文链接:https://www.haomeiwen.com/subject/appyahtx.html