指针之野指针系列(2):如何规避野指针

指针之野指针系列(2):如何规避野指针!

对于野指针的成因,部分由笔者上篇博文吸引而来的读者已经知道并且理解,但是对于部分由外网搜索而来的读者可能不是很理解,因此可以参考一下笔者上篇博文:指针之野指针系列(1):什么是野指针!

因此这篇博文,笔者带领大家来认识了解,并且能够有效的规避野指针!

想要正确的规避野指针,其实也只能从源头上来寻找问题来源,并且找出解决办法!

总而言之:对于如何规避野指针问题:大概只有一下几种方法来解决!

1.指针初始化

2.小心指针越界

3.指针指向空间的释放,及时置NULL;

4.避免返回局部变量的地址;

5,指针使用之前检查有效性;

其实主要还是在于程序员自己细不细心了!

下面来细细分析一下:建议根据笔者上篇博文来一块进行阅读这篇博文,这样更能深刻理解笔者想要表达的内容!

1.指针初始化

int a=10;
int *pa=&a;

对于指针pa有着明确的初始化类型,指向a;

#include <stdio.h>
int main()
{
	int a = 10;
	int* pa = &a;

	printf("%d\n", *pa);

	return 0;
}

对于这样的代码,一看就是正确的,编译器也不会舍得给报错的!

 因此,指针初始化,显得尤为重要!

2.小心指针越界

  这个就是需要读者自己来分析所写的代码,或者肉眼观看,或者进行调试,但是对于调试所需要的一些小小的快捷键,需要读者进行一定的认识与了解!然后需要注意的就是笔者上篇博文举列子中的错误:for(i=0;i<=10;i++)在这里表现出的结果就是明显的数组越界访问!导致程序崩溃

对于下面三个规避野指针的方法!

笔者通过对第五条5,指针使用之前检查有效性;来进行合一块详解!

检查有效性,顾名思义,就是指针万一不能用??因此需要我们来进行对有效性的检查!

#include <stdio.h>
int main()
{
	int* p = NULL;

	if (p != NULL)
	{
		printf("%d\n", *p);
	}
	return 0;
}

在这里面  int* p = NULL; //置空   NULL------>0  就是专门用来初始化指针的!

在上述代码中,将p进行NULL置空,因此,在if语句的判断中,表达式为0;并没有任何的输出结果!

 但如果不将*p进行NULL置空,将会出现程序报错的结果!直接不能运行,因此,及时将指针进行NULL置空,也是很有必要的!

 下面在根据一个代码来进行说明及时NULL置空,也是很有必要的选择!


#include <stdio.h>
int main()
{
	int a = 10;
	int* p = &a;

	if (p != NULL)
	{
		printf("%d\n", *p);
	}
	return 0;
}

在这里用  : 
    if (p != NULL)    语句来进行判断,如果成立则输出,否则,则不输出任何结果!

到此为止!笔者已经将:如何规避野指针问题,讲解完毕,若有不足之处,请联系笔者来进行更改!

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念君思宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值