【C语言】野指针产生的原因、危害和规避方法

本文探讨了C语言中野指针产生的原因,包括未初始化指针、释放内存后未置空指针以及超越变量作用域。野指针可能导致不可预知的程序行为,增加调试难度。为避免野指针问题,建议在定义时初始化指针为NULL,并在释放内存后将指针设为NULL。通过实例展示了错误与修正后的代码,以帮助理解规避野指针的方法。
摘要由CSDN通过智能技术生成

1.野指针产生的原因:

1、定义指针变量的同时未对其进行初始化:指针在被定义的时候,如果程序不对其进行初始化的话,它会指向随机区域,因为任何指针变量(除了static修饰的指针变量)在被定义的时候是不会被置空的,它的默认值是随机的。

2、指针所指向的内存空间被释放时,却没有对该指针变量的值(即该指针原来指向的内存空间的地址)进行置空:我们在用库函数malloc开辟内存空间时,要检查返回值是否为空,如果为空,则开辟失败;如果不为空,则指针指向的是开辟的内存空间的首地址。指针指向的内存空间在用free()或者delete(注意delete只是一个操作符,而free()是一个函数)释放后,如果程序员没有对其置空或者其他的赋值操作,就会使其成为一个野指针。

3、指针操作超越变量作用域:勿返回指向栈内存的指针或引用,因为栈内存在函数结束的时候会被释放。比如绝不返回局部变量和局部数组的地址。

2.野指针的危害:

野指针的问题在于,指针指向的内存空间已经无效了,而该指针变量的值(即该指针原来指向的内存空间的地址)没有被置空,解引用一个非空的无效指针是一个未被定义的行为,也就是说不一定导致段错误,野指针很难定位到是哪里出现的问题,在哪里这个指针就失效了,不好查找出错的原因。所以调试起来会很麻烦,有时候会需要很长的时间。

3.规避野指针的方法:

1、在定义一个指针时同时初始化为NULL;
例:

int *p=NULL

2、释放指针指向的内存空间时,将指针重置为NULL。(最好在编写代码时将free()函数封装一下,在调用free()后就将指针置为NULL。

例:

free(p1);			//只释放了p1指向的堆区空间  并没有将指针p1置为空
p1 = NULL;

程序实例演示:

错误实例:

#include <stdio.h>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值