目录

  • 一.简介
  • 二.野指针产生的原因
    • 1.指针变量未初始化
    • 2.指针释放后之后未置空
  • 三.避免野指针产生
    • 1.初始化时置 NULL
    • 2.释放时置 NULL
  • 四.猜你喜欢

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.简介

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的);

二.野指针产生的原因

1.指针变量未初始化

任何指针变量刚被创建时不会自动成为 NULL 指针,它的缺省值是随机的。

所以,指针变量在创建的同时应当被初始化,要么将指针设置为 NULL ,要么让它指向合法的内存。

如果没有初始化,编译器会报错‘point’ may be uninitializedin the function

2.指针释放后之后未置空

指针在 freedelete 后未赋值 NULL ,它们只是把指针所指的内存给释放掉,但并没有处理指针本身。此时指针指向不可知的(随机的、不正确的、没有明确限制的)。

释放后的指针应立即将指针置为NULL,防止产生野指针。

三.避免野指针产生

1.初始化时置 NULL

指针变量一定要初始化为 NULL,因为任何指针变量(除了 static 修饰的指针变量)刚被创建时不会自动成为 NULL 指针,它的缺省值是随机的。

2.释放时置 NULL

当指针 p 指向的内存空间释放时,没有设置指针 p 的值为 NULLdeletefree 只是把内存空间释放了,但是并没有将指针 p 的值赋为 NULL

通常判断一个指针是否合法,都是使用 if 语句测试该指针是否为 NULL。例如:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 野指针
//@Time:2021/06/20 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/#include<stdlib.h>
#include<stdio.h>
void main()
{int *p = new int(6);printf("释放内存之前 p:%p\n", p);//delete 释放内存delete p;if (p != NULL) //delete 之后指针指向未知/随机内存printf("释放内存之后 p:%p\n", p);//*p = 7; //操作未知/随机的内存地址,程序异常崩溃system("pause");
}
/*
输出:
释放内存之前 p:016950E8
释放内存之后 p:00008123
请按任意键继续. . .
*/

重上面的代码输出结果可以看出:delete 之后,指针 p 地址并没有被置为 NULLp 此时指向一块随机/未知的内存地址,一旦对未知的内存地址操作或者访问,程序崩溃

四.猜你喜欢

  1. C 语言逻辑运算符
  2. C 语言三目运算符
  3. C 语言逗号表达式
  4. C 语言 sizeof 和 strlen 函数区别
  5. C 语言 strcpy 和 strcpy_s 函数区别
  6. C 语言 memcpy 和 memcpy_s 区别
  7. C 语言 数组定义和使用
  8. C 语言 数组遍历
  9. C 语言 数组下标越界
  10. C 语言 数组内存溢出
  11. C 语言 数组下标越界和内存溢出区别
  12. C 语言 二维数组定义和使用
  13. C 语言 二维数组行数和列数计算
  14. C 语言 指针声明和定义
  15. C 语言 指针 p++ / p–
  16. C 语言 p++/§++/_(p++)/_p++
  17. C 语言 使用指针遍历数组
  18. C 语言 指针和数组区别
  19. C 语言 数组指针
  20. C 语言 指针数组
  21. C 语言 指针数组和数组指针区别
  22. C 语言 空指针 NULL
  23. C 语言 void 指针
  24. C 语言 野指针

未经允许不得转载:猿说编程 » C 语言 野指针

C语言 野指针 - C语言零基础入门教程相关推荐

  1. C语言 const 修饰指针 - C语言零基础入门教程

    目录 一.const 简介 二.const 修饰指针 1.const int *p 2.int const *p 3.int * const p 4.const int * const p 三.猜你喜 ...

  2. C语言 函数指针和指针函数区别 - C语言零基础入门教程

    目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...

  3. C语言 函数指针 - C语言零基础入门教程

    目录 一.函数指针简介 1.常规函数声明 2.函数指针声明 二.函数指针实战 三.猜你喜欢 零基础 Python 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.函数指 ...

  4. C/C++ _wcsupr_s 函数 – unicode 字符串小写转大写 - C语言零基础入门教程

    目录 一._wcsupr_s 函数简介 二._wcsupr_s 函数实战 三.注意问题 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零 ...

  5. C/C++ _wcslwr_s 函数 – unicode 字符串大写转小写 - C语言零基础入门教程

    目录 一._wcslwr_s 函数简介 二._wcslwr_s 函数实战 三.注意问题 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零 ...

  6. C/C++ _strupr_s 函数 – 字符串小写转大写 - C语言零基础入门教程

    目录 一._strupr_s 函数简介 二._strupr_s 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零基础 C/C+ ...

  7. C/C++ _strlwr_s 函数 – 字符串大写转小写- C语言零基础入门教程

    目录 一._strlwr_s 函数简介 二._strlwr_s 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 零基础 C/C+ ...

  8. C/C++ atol函数- C语言零基础入门教程

    目录 一.ltoa 函数简介 二.int/long/unsigned long 区别 1.无符号整形(16 位系统) 2.有符号整形(16 位系统) 3.int 和 long 区别 三.atol 函数 ...

  9. C/C++ strtol 函数 - C语言零基础入门教程

    目录 一.strtol 函数简介 二.strtol 函数函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.strtol 函数简 ...

  10. C/C++ strtod函数 - C语言零基础入门教程

    目录 一.strtod 函数简介 二.strtod 函数函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.strtod 函数简 ...

最新文章

  1. 物联网趋势下的边缘计算发展解析
  2. md5 java_java中MD5函数
  3. 【科普】什么是Docker?看这一篇干货文章就够了!
  4. php解压功能的函数
  5. mysql 触发器 运算符_mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法...
  6. traha服务器维护进不去,traha新手攻略,教你迅速上手游戏
  7. RADIO控件变量添加
  8. Unity3D基础15:触发器
  9. 手撸反向传播算法(附代码)
  10. 矩阵分解在推荐系统中的应用:NMF和经典SVD实战
  11. NeHe_Lesson8 Blending
  12. 初级药师职称需要考计算机英语吗,药师职称评审政策解读:初级药师不用再考了!...
  13. 信号与系统分析中的复变函数
  14. 工业3D互联网可视化三维数字化智能工厂管理系统
  15. 如何在IDEA中使用 Jclasslib
  16. Ricequant米矿【MACD策略代码解释】量化交易
  17. 苹果Mac电脑缓存如何清理?
  18. SharePoint2016 - How to create App Catalog site?
  19. hipster_通过Java Hipster升级Spring Security OAuth和JUnit测试
  20. windows xp 系统CMD命令大全

热门文章

  1. 打车业务下单高并发解决方案
  2. “新基建”提速,工业互联网大数据发展迎新机遇
  3. Fish Redux中的Dispatch是怎么实现的?
  4. 阿里云产品头条(2017年12月刊)
  5. 从达标到卓越 —— API 设计之道
  6. WorkManager从入门到实践,有这一篇就够了
  7. 全新的 Fragment 通信方式
  8. 音视频应用驶入快车道 开发者如何快速追赶这波技术红利?
  9. 整理了Kafka的一些常用工具,建议收藏备用!| 博文精选
  10. 提升沟通效率52%  阿里政务钉钉助力政府数字化转型