如何避免野指针的情况出现!

前言:


相信各位小伙伴在学习C语言指针的时候往往都会头痛,因为会时常遇到野指针,那么我的上篇文章已经介绍了 什么是野指针 ,那么今天我就给大家分享一下如何尽可能的避免野指针的出现,为啥是尽可能的,因为每个人都会有犯错的时候嘛,所以我们不求十全十美也不可能做到十全十美,好了废话不多说,进入主题!


避免野指针的方法:


一:指针初始化
良好的代码风格和习惯往往能使我们事半功倍,不仅有助于自己写代码时理清思路,还有助于别人更好的阅读自己的开源代码,不仅仅是指针尽量初始化,任何变量和数组小编在这里都强烈建议各位进行初始化。
 


那么问题来了,我们知道数组和变量可以初始化为零,那么数组如何进行初始化呢?
答:指针初始化的时候可以把指针先初始化为空指针。
 


#include 
int main()
{
int num = 0;//变量初始化
int arr[10] = {0};//数组初始化
int *pa = NULL;//指针初始化为空指针,注意这样初始化不可使用这个指针,但可以有效进行初始化
return 0;
}

二:小心指针越界!


啥叫指针越界呢?
答:指针越界是指超出了指针指向已分配空间的变量或常量的空间。
就好比你家住一楼但你二楼也要住似的,这就是非法访问内存,
会带来不可预知的错误。
 


#include 
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//给数组arr分配十个元素的空间
int* pa = &arr;//创建整形指针指向arr数组的首元素
int i = 0;//创建变量i并初始化为0
for(i=0;i<=10;i++)//注意这里的判断条件是i <= 10,所以该循环会被执行11次,最终导致越界访问
{
*pa[i] = 0;//给指针指向的元素赋值为0
}
return 0;
}

所以应该避免这种情况,需要把<=改为<。


三:避免指针指向的空间为已释放的空间
 


什么意思呢?
就是说之前的时候这个变量存在可是当我对指针进行解引用的时候这个变量已经销毁了,不存在了。因为 它是个局部变量,下面用代码段来解释一下。


#include 
int* test()//定义test函数的返回类型为int*
{
int tmp = 10//创建临时变量tmp
int* pa = &tmp;//创建整形指针变量指向变量tmp
return *pa;//返回指针,注意因为这个变量是在自定义函数内创建的临时变量
//所以return返回后tmp变量自动销毁
}
int main ()
{
int ret = test();//创建变量来接收test函数的返回值
*pa = 20;//对局部变量进行解引用操作
printf("%d\n",ret);//打印变量ret

return 0;
}

四:指针使用之前检查有效性


这个很好理解,就是使用指针之前对该指针进行地址是否有效进行检查,就是说指针不能指向为开辟空间的变量和对空指针进行直接使用。


结语:好了那么关于本期的只要内容如何避免野指针出现的问题,小编就分享到这里,我会持续更新希望得到大家的关注与支持。

你可能感兴趣的:(C语言易错点分享,c语言,蓝桥杯,c++)