指针之野指针系列!对于指针大家或许知道不少,甚至能款款道来指针的定义,内容,书写方式.......一系列书本上可以获得的知识,但是对于野指针,不知道大家又能知道多少呢??
对于野指针,已经笼统化,甚至有读者仅仅知道野指针,但是对于野指针是什么,却没有详细的自我观点,仅仅人云我亦云罢了!
下面请看笔者带领大家来认识野指针!
野指针顾名思义!着重在于“野”字:正如野狗一样,看不见时候,或许会直接咬上来,打的措手不及!
因此野指针泛指:指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)!
对于野指针的定义,我想大家也都能理解看清楚!
下面来看看野指针的成因:
1.指针未初始化
下面笔者用代码来带领大家进行分析:
#includeintmain{int*p;*p=20;printf("%d\n",*p);return0;}
在该段代码中,指针并没有进行初始化:但是进行了报错,因此指针未初始化:这样是运行不出来的!
下面,笔者来带领大家对该段代码进行分析:
对于int*p;这里面的p未进行初始化,指局部变量未进行初始化,默认为随机值!因此p就是野指针,但是这个随机值作为一个地址,所管理的一片空间,并不属于当前程序!因此通过:*p=20;将20赋值给*p出现了错误!所以程序运转不出来!
2.指针越界访问
下面笔者用代码来带领大家进行分析:因为代码能够更好的反应出情况!
#includeintmain{intarr[10]={0};inti=0;int*p=arr;for(i=0;i<=10;i++){*p=i;p++;printf("%d",arr[i]);}return0;}
在该段代码中,数组进行越界访问!通过for循环,for(i=0;i<=10;i++)访问了不属于该数组的arr[10],因此导致程序崩溃!
在这该段代码里面,直接导致程序崩溃,其实只要保持不越界访问,便很少出现这样的情况!
3.指针指向空间的释放!
该内容由于涉及知识较为广泛,而笔者此时并没有涉及,因此不做过多解释,若有转牛角尖的读者,请绕道参考其他博主内容!在此,笔者不做过多讲叙!
上述笔者讲解了对于野指针的成因,我想读者应该也有着大概的认识,但是对于如何规避野指针问题,请参考笔者下篇博文!
上一篇:热血传奇: 减免20%伤害, 并且能增加爆率的特戒——邪眼指环
下一篇:LBL上演“失业者联盟”? 中韩对抗赛即将来袭, 今年失业率太高!
哈哈哈 子弹越打越多了
.
《刺客信条: 黑旗 记忆重置》回应DLC比本体贵: DLC非必须
当臭猫扶贫神秘嘉豪号主!
原神: 7.0奥黛塔定位反转! 并非木偶专属, 冰神设计成最大悬念
哪辆车能不被28吨钢卷压成废铁? 哪辆车能不被28吨钢卷压成废铁?
原神: 新超导木偶队顶配配装攻略! 告别刮痧与充能卡顿