关于指针最容易出错的莫过于野指针了,在写代码时不知不觉就会出现野指针。那么话又说回来了什么是野指针呢。先来说一下他的概念把:野指针就是指针指向的位置是不可知的或者是随机的不正确的,并没有明确限制的。常见的野指针有哪些呢?
首先先说一下当一个局部变量没有赋予初始值时则它的默认值是随机值。那么指向这个局部变量的指针就是一个被初始化的随机值。这是使用这个指针时就会出现空指针。所以当创建一个局部变量时如果不知道赋予什么初始量,则可以将它赋为‘0’。
还有一个情况就是调用这个指针超出了他的储存范围,下面以一个代码为例:
int main()
{
int arr[10]={0};
int *p=arr;//当指针指向一个数组的时候,所表示的是第一个元素也就是arr[0]的地址。
int i=0;
for(i=0;i<=12;i++)//这时arr的储存量只有10但是却调用了12次,这就说明当过10次时指针则会调用到一个不知明地址的内存中。这时同样会出现野指针的情况。
{
p++;
}
return 0;
}
关于野指针还有一个特别容易忽略也是最容易出现错误的情况。还是用一段代码来解释
int* test()
{
int a=10;
return &a;
}
int main()
{
int* p =test();
*p=20;
return 0;
}
这个代码是不是乍一看没有问题。
但是在调用函数时int* p接收&a的返回值也就是a的地址但是当函数调用结束时被调用函数后所占用的内存会被释放,这就是说明int* p指代的是原本被调用时a的地址但是回到主函数后被释放,此时a并不等于时,只是说明a曾经住过这个地址但是现在不在这了,此时的地址指向的就是一个随机值,也就是一个野指针。
这就是几种野指针常见的形式,如果有补充欢迎大佬点评!!!!!!! qwq!