1,什么是NULL指针?

NULL用于指示指针未指向有效位置。理想情况下,如果在声明时不知道指针的值,则应将指针初始化为NULL。另外,当由它指向的内存在程序中间被释放时,我们应该使指针为NULL。

2,什么是悬空指针?

悬空指针是没有指向有效内存位置的指针。当删除或释放对象时,如果不修改指针的值,就会出现悬空指针,因此指针仍然指向释放后的内存的存储位置。以下是示例。

悬空指针

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

void *p = malloc(size);
assert(p);
free(p);
// 现在 p 是“悬空指针”

assert(p)是判断如果指针p存在,则程序往下执行。如果这块内存被操作系统回收(被释放),但是指针仍然指向原来分配给他的这块内存空间,那么此时该指针就是“悬空指针”.

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

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

void *p = malloc(size);
assert(p);
free(p);// 避免“悬空指针”p = NULL;

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

3, 野指针

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

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

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

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

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

什么是“NULL指针”,“悬空指针”和“野指针”?相关推荐

  1. 指针、空指针、野指针

    一.指针 指针是C和C++语言中的一种重要的数据类型,它存储了一个变量或对象的内存地址.指针可以让程序直接访问内存中存储的数据,具有很高的灵活性和效率,是处理动态内存分配.数组.结构体.函数等操作的重 ...

  2. 逍遥自在学C语言 | 指针陷阱-空指针与野指针

    前言 在C语言中,指针是一种非常强大和灵活的工具,但同时也容易引发一些问题,其中包括空指针和野指针. 本文将带你了解这两个概念的含义.产生原因以及如何避免它们所导致的问题. 一.人物简介 第一位闪亮登 ...

  3. C++:指针:什么是野指针

    野指针目录 1:定义 2:野指针常见情形 2.1 :未初始化的野指针 2.2 所指的对象已经消亡 2.3 指针释放之后未置空 3:避免野指针 1:定义 指向非法的内存地址的指针叫做野指针(Wild P ...

  4. C/C++编程笔记:详解三种指针(悬空指针、空指针和野指针)

    悬空指针 指向已删除(或释放)的内存位置的指针称为悬空指针.指针用作悬空指针有三种不同的方式 ①内存分配: ②函数调用: 如果x是静态变量,则不会出现问题(或p不会悬空). 输出:5 变量超出范围 无 ...

  5. 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释

    1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...

  6. C++之指针探究(七):void指针、空指针、野指针、各种零所代表的含义

    前文:C++之指针探究(六):二级指针和数组指针 一.void指针   void指针即通用指针,可以指向任意类型的数据.也就是说,任何类型的指针都可以赋值给void指针.     将任何类型的指针转换 ...

  7. 无类型指针、空指针和野指针

    1.无类型指针:void *p: 不指定它指向具体哪种数据类型.可以通过强制转化将void *转化为其他类型指针,也可以用(void *)将其他类型指针强制转化为void类型指针.指针之间赋值需要类型 ...

  8. c语言编程中野指针错误,C语言(野指针错误)

    realloc引起的coredump 记录一次接口程序在运行过程中产生的崩溃问题,通过调试 core文件,定位到是程序在调用realloc 时候出现了问题 问题程序代码 #include #inclu ...

  9. c语言的野指针以及如何避免野指针

    1.什么是野指针?未初始化的指针,随机指向一块内存2.如何避免野指针?养成良好的编码习惯:一.当指针没有确切指向要置空:二.当要给指针指向的空间赋值时要给它分配空间:三.检查空间分配是否成功:四.分配 ...

  10. fscanf读内容后发生错误,文件指针变成乱码(野指针)

    1.今天写代码时,碰到了一个错误,在读fscanf时碰到的,排查很久,错误如下 2.具体如下 在VS2013环境中,读文件的某一行内容如下: Hold simulation Function : 1 ...

最新文章

  1. 关于android布局的两个属性dither和tileMode,background 平铺
  2. 特殊的IP地址与端口
  3. 让你彻底理解Synchronized
  4. 【通知】有三AI新手入门群开放,欢迎新手们来加入
  5. 抓住县域消费者的“胃”,淘特凭什么?
  6. Boost:演示了black-scholes option 定价内核
  7. Centos/RHEL上查看主板型号
  8. ajax option请求后无post请求_ThingJS:一种浏览器、服务器和技术的新组合方法——Ajax...
  9. [转载] PGPool介绍和安装经验
  10. Unity如何刚体控制物体的移动以及旋转
  11. Linux查看硬件信息命令大全
  12. VB根据窗体自动调整窗体内控件大小 注:实用,可以直接引用
  13. layer.js之回调销毁对话框
  14. 高精度室内外融合定位服务平台-“羲和”系统
  15. jmail 发送html,jmail发送html格式的邮件
  16. 下行控制信息 - 下行DCI
  17. Cleanup failed to process the following paths错误的解决
  18. STM32串口通信发送Hello Windows!
  19. pandas将df赋值到另一个df_Python/Pandas:如果匹配的話,將一個df的值添加到另一個df的行的末尾...
  20. Strippednot stripped

热门文章

  1. 把PNG 图片设置透明
  2. shopee店铺数据分析(二)
  3. python培训班 合肥
  4. Word空白页删除小技巧
  5. 首次 adb WiFi 连接设备教程
  6. CentOS虚拟机通过主机WIFI上网
  7. 第14届蓝桥杯模拟赛第一套(超声波+串口)
  8. @@TRANCOUNT (Transact-SQL)
  9. 现实迷途 第三十一章 胡乱吹水
  10. oracle 主频 敏感,选择数据库服务器CPU的主频多少合适