“野指针”的讨论

编程人生:面试中常见的五道C语言基本题,你懂吗? 一、什么是C语言中的“悬空指针”? C语言中的指针可以指向一块内存,如果这块内存稍后被操作系统回收(被释放),但是指针仍然指向这块内存,那么,此时该指针就是“悬空指针”。下面这段C语言代码是一个例子,请看: void*p =malloc(size);assert(p);free(p);// 现在 p 是“悬空指针” C语言中的“悬空指针”会引发不可预知的错误,而且这种错误一旦发生,很难定位。这是因为在 free(p) 之后,p 指针仍然指向之前分配的内存,如果这块内存暂时可以被程序访问并且不会造成冲突 阅读详情

 野指针:

定义:  

“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。

成因:

  野指针的成因主要有三种:

  一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。

  二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。例:

       

指针,野指针,空指针,赋值? bug中最可怕的是野指针,那么问题来了,野指针是什么?是如何产生的?为什么程序员会“忘记”? 昨天调试时,我发现了一个野指针,由此我明白了。 a的值成了乱码,而且gcc编译器并没有报错,那么请看下面的代码 #include int fun(int *a) { int i; *a=0;//添加的代码 for(i=0;i<10;i++) (*a)++; return 阅读详情

相关推荐

空指针、悬空指针、野指针

文章目录前言一、指针?二、指针的应用场景三、 空指针四、 野指针正确用法总结 前言 相信很多小伙伴对指针的使用都有一定的了解了。但更多的人可能对指针又爱又恨。这次我们谈点重要的,进一步加深对指针的理解 一、指针? 指针是一种特别变量,全称是指针变量,专用于存放其它变量在内存中的地址编号。把指针指向具体的内存变量的地址,就是对指针赋值。 二、指针的应用场景 用作函数的参数传递和函数的返回值。 利用指针传递参数,可避免变量复制,减少内存开销,提高效率。 三、 空指针 没有赋值的指针变量(没有指向内存变量的

weixin_46269257的博客 1632

初识指针(pointer)

一、为什么学指针 指针提供了对地址操作的一种方法,因此,使用指针可使得 C 语言能够更高效地实现对计算机底层硬件的操作。另外,通过指针可以更便捷地操作数组。在一定意义上可以说,指针是 C 语言的精髓。没有学指针就相当于还没有学C语言(夸张!) 二、指针是什么 认识指针之前先了解内存与地址 在计算机中,数据是存放在内存单元中的,一般把内存中的一个字节称为一个内存单元。为了更方便地访问这些内存单元,可预先给内存中的所有内存单元进行编号,这些编号叫做地址,通过地址可准确找到其对应的内存单元...

weixin_63503875的博客 870

二级指针和野指针

1. 关于二级指针 例如:char **p; 这里定义了一个二级指针变量p,p是一个指针变量,毫无疑问在32位系统下占4个byte。 它与一级指针不同的是,一级指针保存的是数据的地址,二级指针保存的是一级指针的地址,布局如下: 2.“数组参数”和等效的“指针参数” a. void fun(char a[3][4]); 等效为:void fun(char (*p)[4]); b.

wzp_moon的博客 634

指针浅薄之见

指针

m0_63742310的博客 387

C/C++this指针、空指针、野指针和引用

1. this指针 1.0 常识性问题 当对象访问类中的非静态成员时,编译器会自动将对象的地址隐式的作为第一参数传递给this指针。 类的静态成员属于整个类,不属于某一个对象,没有对象也就谈不上this指针。 编译器的实现决定this指针保存的位置。 this指针是一种特殊的指针,无法直接获取this指针的地址。 this指针并不是类的成员,不属于类的一部分。 this指...

qq_38260691的博客 1376

如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤

如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤。

wyxtx的博客 5662

面试官最爱问的二叉树销毁,为什么必须用后序遍历?一个野指针崩溃案例讲清楚

本文深入探讨了二叉树销毁过程中必须使用后序遍历的原因,通过一个真实的野指针崩溃案例揭示了前序遍历和中序遍历在销毁时的内存访问风险。文章详细分析了后序遍历如何确保安全释放内存,并提供了进阶技巧和面试考点,帮助开发者深入理解二叉树销毁的正确实践。

weixin_30689307的博客 228

Blender----利用DEM(tif)生成三维模型

利用DEM(tif)生成三维模型

LongJ_Sir的博客 5425

C语言指针——最简单粗暴的方式带你手撕各种指针!!!

还不会指针?看完老师都扣6

Niannn99的博客 292

从SGX到TDX:英特尔机密计算的技术演进与选型指南

本文深入解析了英特尔两代机密计算技术SGX与TDX的核心差异与选型策略。SGX提供应用级飞地隔离,安全等级高但开发复杂;TDX提供虚拟机级信任域保护,兼容性好且易于部署。文章结合金融与医疗行业实战案例,为开发者提供了清晰的选型指南,帮助根据代码可改性、安全需求、部署规模及生态成本选择最合适的机密计算方案。

java5的博客 420

临床预测模型R语言全流程实战:从建模到Bootstrap验证的完整代码

临床预测模型是利用患者特征预测疾病结局发生概率的重要统计工具,其核心在于通过Logistic回归或Cox比例风险模型建立风险函数,并借助ROC曲线、校准曲线等指标评估模型的区分度与校准度。Bootstrap内部验证和DCA决策曲线分析则是当前审稿人关注的焦点,前者用于校正过拟合带来的乐观估计,后者用以判断模型在临床决策中的实际净获益。在肿瘤预后、慢病风险评估等场景中,基于R语言的模型构建与列线图可视化已成为论文发表的关键环节。本文以survival包自带肺癌数据为例,系统展示从数据预处理、变量筛选到多因素建

weixin_33483304的博客 243

这代码,屌!!!!

晚上下班回来看到的代码话不多说这样的代码,只能说是厉害。先简单解释下p 肯定是分配到内存了,这个时候堆内存然后free了,而且,free后没有把p设置成NULL,所以这个p是野指针,你把房子卖了,但是你竟然还拿着这个房子的钥匙。拿着钥匙就算了,你还往里面写了一个 「hello world」并且还竟然要printf出来。所以,这个代码应该是要输出hello world的。不知道各位大佬们怎么看这样的...

嵌入式Linux 109

直线型一阶倒立摆1---从理论到实践的桥梁

本文深入探讨了直线型一阶倒立摆在控制理论中的核心地位,从非线性控制、鲁棒性到实时反馈等关键问题。通过实际案例和硬件搭建指南,帮助读者理解从理论到实践的过渡,特别适合控制工程初学者和研究人员。文章还提供了算法选型建议和硬件避坑手册,是掌握倒立摆控制的实用指南。

weixin_29047545的博客 318

0xCCCCCCCCC的内存不能访问的原因

转自:https://blog.youkuaiyun.com/csw_100/article/details/5665393 在VC6下调试程序,可能会遇到诸如指令引用“0xcccccccc”,该内存不能为Read的报错 究其原因,就debug版中的堆栈中的局部变量(包括指针)在明确初始化之前都用0x0cc进行初始化,因此,未初始化时 候的指针是指向地址0x0cccccccc的,而这段地址一来是处

qq_16334327的博客 808

STM32-DAC定时器触发三角波生成【频率与幅度精准控制】

本文详细介绍了STM32 DAC定时器触发三角波生成的原理与实现方法,涵盖硬件配置、频率与幅度精准控制技巧及代码实现。通过定时器触发DAC模块,可灵活调节三角波的频率和幅度,适用于信号发生器等高精度应用场景。

weixin_29161785的博客 453

【硬刚Hive】HIVE基础(20):Hive函数(9) over 窗口函数

欢迎关注博客主页:微信搜:import_bigdata,大数据领域硬核原创作者_王知无(import_bigdata)_优快云博客 欢迎点赞、收藏、留言 ,欢迎留言交流!本文由【王知无】原创,首发于 优快云博客!本文首发优快云论坛,未经过官方和本人允许,严禁转载! 本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hive部分补充。 hive窗口函数语法 在前言中我们已经说了avg()、sum()、max()、min()是分析函数,而over()才是窗..

微信搜:import_bigdata,大数据领域硬核原创作者 888

内存管理

欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 7

u010530573的专栏 388

知识图谱大模型系列之 12 LLM 知识图谱构建器:从零到 GraphRAG 使用 LLM 知识图谱生成器在 GenAI 应用中提取和使用知识图谱(教程含源码)

为了更深入地了解 LLM 知识图谱构建器,GitHub 存储库提供了大量信息,包括源代码和文档。此外,我们的文档提供了详细的入门指南,而GenAI 生态系统则提供了有关可用更广泛工具和应用程序的进一步见解。

iCloudEnd的博客 2037

空指针与野指针

1.空类型指针 首先什么是空类型呢,空类型就是void,自然,空类型指针就是void * 2.空类型指针的作用 void * 可以指向任何类型对象的地址,表示这是一个指针,和地址值有关,但不知道存储在此地址上的对象的类型,所以在取空类型指针所指向的值的时候,应将空类型指针转换为对应的指针类型 int a = 10; char b = 'a'; float c = 12.0; void...

renwu 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

什么是野指针

 什么是野指针? 转载野指针,也就是指向不可用内存区域的指针。通常对这种指针进行操作的话,将会使程序发生不可预知的错误。 “野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种: 一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省

sixicao126的专栏 1345

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

空指针和野指针

一、什么是空指针和野指针 1.空指针 1> 没有存储任何内存地址的指针就称为空指针(NULL指针) 2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0。 下面两个都是空指针: 1 Student *s1 = NULL; 2 3 Student *s2 = nil;   2.野指针 "野指针"不是NULL指针,是指向"垃圾

一步一步走 1303

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

c++中的悬浮指针和野指针 二级指针

c++中的悬浮指针:声明了但没有被付值的指针,它指向内存中的任意一个空间。避免悬浮指针的一个方法是开始就付值为NULL  “野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:   一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是

思緒凌亂 4724

C++之深入解析野指针和悬空指针

野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NULL避免,而只能通过养成良好的编程习惯来尽力减少,对野指针进行操作很容易造成程序错误。

╰つ栺尖篴夢ゞ 2430

野指针,悬垂指针,垃圾内存,内存“黑洞”

野指针首先他不是NULL指针,其次他指向的内存是不合法的,这个不合法的内存俗称“垃圾”内存。它产生的原因一个是在free或是delete后,没有及时将指针设置为NULL。野指针的检测也是很困难的,比如用if(0 == ptr)也是不行的,因为在free或是delete后ptr并没有被设置为NULL。关于为什么是(0 == ptr)而不是(ptr == 0),这一点建议去看Effective C++

坚持理想 面对现实 3994

野指针 空指针

关于空指针NULL、野指针、通用指针 首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了。  假设 有语句 int a=10;  那么编译器就在内存中开辟1个整型单元存放变量a,我们假设这个整型单元在内存中的地址是 0x1000;那么内存0x1000单元中存放了数据10,每次我们访问a的时候,实际上都是访问的0x1000单元中的10.  现在定义:int *p;  p=&amp...

莫道君行早,更有早行人 303

什么是野指针?

什么是野指针?   一个母亲有两个小孩(两个指针),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(指针指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业。但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕吃了,没能带出来。而在卧室的没有吃到蛋糕,所以不肯完成他的作业。结果母亲却不知道卧室的孩子没有吃到蛋糕,还以为作业完了。结果第二天她就被老师召唤到

绯浅yousa的笔记 8983
上一篇: 快速排序
下一篇: 有关野指针的讨论
Zevin
博客等级 码龄17年 63粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值