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

举报
念君思宁 发表于 2023/02/16 18:06:49 2023/02/16
【摘要】 指针之野指针系列(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)    语句来进行判断,如果成立则输出,否则,则不输出任何结果!

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。