今日份学习“野指针”
本文简介:
介绍野指针,什么情况会生产野指针,我们该如何避免野指针问题。
一,定义
野指针:是指针指向的位置是不可知的,随机的,不正确的,没有明确限制的。
我们在main函数内部创建了一个指针变量但没有赋值,则它会被赋为随机值,随机指向一块内存空间,且这块空间我们并未开辟的话,如果调用了这个指针则会造成越界非法访问,且如果这块空间开辟了的话,如果在不知情下调用了这个指针则会对该空间的数据发生改变,以至于出现程序的BUG。这是我们需要特别注意的情况。
二,野指针成因
1,指针为初始化:
int a;//局部变量不初始化默认为随机值
int*p;//局部的指针变量不初始化被默认随机值“野指针”
2.指针的越界访问:
int arr[10]={0};
int*p=arr;
for(int i=0;i<=11;i++)//该循环造成了指针的越界,从而产生野指针
p++;
3.指针指向的空间被释放了
int* teat()
{
int a=0;
return &a;//返回变量a的地址
}
int main()
{
int*p=test();//接收test函数开辟a变量的地址。
*p=20;//将这块空间的数据改为20
//当该函数返回a的地址后,且该函数便被销毁了,而a的生命周期便也不存在了
//而指针p指向的这块空间则被释放了,从而导致p成为了一个野指针
return 0;
}
三,如何规避野指针
1,指针初始化,当不知道给一个指针变量赋予什么值时,可以赋“NULL”为空指针
2.小心指针越界,避免在循环代码中出现了越界访问的情况
3.指针指向的空间释放即置为NULL
4.指针使用之前检查有效性
结束语:
该篇文章总的来说,我们使用指针的时候一定要想好它的控制范围,避免造成越界访问等等...成为野指针,暂时不需要控制的指针可及时置为空指针“NULL”
标签:控制,指向,初始化,int,失去,越界,随机,指针 From: https://blog.51cto.com/u_15993084/6132752