数据结构 野指针

一、什么是野指针?

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的),指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。

二、为什么有野指针?

1、指针定义时未被初始化:指针在被定义的时候,如果不对其进行初始化的话,它会随机指向一个区域,因为任意指针变量,它的默认值都是随机的;

2、指针被释放时没有置空:我们使用new开辟内存空间的时,需要检查返回值是否为空,如果为空,则开辟失败;如果不为空,则指针指向的是开辟的内存空间的首地址。指针指向的内存空间在用 delete 释放后,如果没有对其进行置空或者其他赋值操作的话,就会成为野指针;

3、指针操作超越变量作用域:不要返回指向栈内存的指针或者引用,因为栈内存在函数结束的时候会被释放。

三、野指针有什么危害?

当一个指针成为了野指针,他的指向就是随机的,当你使用了一个指向随机地址的指针时,他的危害程度也是随机的,不可预测的,它一般会造成内存泄漏,而且很容易遭受到黑客还有病毒的攻击。

内存泄漏:

是由于疏忽或错误造成程序没有及时释放已经不使用的内存情况。内存泄漏并不是物理意义上的内存消失,而是由于程序分配了一段内存后,并不能对这段内存进行控制,造成了内存的浪费。

四、如何避免野指针?

1、养成良好的编程习惯;

2、定义指针时,要进行初始化,如果没有确定的值,就让它指向NULL。因为NULL在宏定义是#define NULL (void **) 0 它代表的是零地址,零地址是不能进行任何读写操作的;

3、当要给指针指向的空间进行赋值时,要检查有没有给这个指针分配空间;

4、要将申请好的空间进行初始化操作,因为这段空间可能会存在之前数据的残留,会对程序造成影响。可以用 memset (p,0,sizeof(int))将指针指向的空间都置为0;

5、使用完指针要及时将指针释放,与 new 所对应的为delete ;

6、释放完成后要将指针指向NULL,否则会生成野指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值