指针之野指针系列(1):什么是野指针

指针之野指针系列! 对于指针大家或许知道不少,甚至能款款道来指针的定义,内容,书写方式.......一系列书本上可以获得的知识,但是对于野指针,不知道大家又能知道多少呢??

对于野指针,已经笼统化,甚至有读者仅仅知道野指针,但是对于野指针是什么,却没有详细的自我观点,仅仅人云我亦云罢了!

下面请看笔者带领大家来认识野指针!

野指针顾名思义!着重在于“野”字:正如野狗一样,看不见时候,或许会直接咬上来,打的措手不及!

因此野指针泛指:指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)!

对于野指针的定义,我想大家也都能理解看清楚!

下面来看看野指针的成因:

1.指针未初始化

   下面笔者用代码来带领大家进行分析:

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

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

	return 0;
}

在该段代码中,指针并没有进行初始化:但是进行了报错,因此指针未初始化:这样是运行不出来的!

 下面,笔者来带领大家对该段代码进行分析:

对于  int* p;   这里面的p未进行初始化,指局部变量未进行初始化,默认为随机值! 因此p就是野指针,但是这个随机值作为一个地址,所管理的一片空间,并不属于当前程序!因此通过:   *p = 20;   将20赋值给*p出现了错误!所以程序运转不出来!

2.指针越界访问

   下面笔者用代码来带领大家进行分析:因为代码能够更好的反应出情况!

#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int* p = arr;
	for (i = 0; i <= 10; i++)
	{
		*p = i;
		p++;
		printf("%d ", arr[i]);
	}

	return 0;
}

在该段代码中,数组进行越界访问!通过for循环,for (i = 0; i <= 10; i++)   访问了不属于该数组的arr[10],因此导致程序崩溃!

 在这该段代码里面,直接导致程序崩溃,其实只要保持不越界访问,便很少出现这样的情况!

3.指针指向空间的释放!

该内容由于涉及知识较为广泛,而笔者此时并没有涉及,因此不做过多解释,若有转牛角尖的读者,请绕道参考其他博主内容!在此,笔者不做过多讲叙!

上述笔者讲解了对于野指针的成因,我想读者应该也有着大概的认识,但是对于如何规避野指针问题,请参考笔者下篇博文!

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

念君思宁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值