目录
概念
指针指向的位置是不可知的(随机的、不确定的、没有明确限制的)
原因
 1、指针未初始化
 
#include<stdio.h>
int main()
{
    int* p;     //局部变量指针未初始化,默认为随机值
    *p=20;
    return 0;
}
 2、指针越界访问
 
#inlcude<stdio.h>
int main()
{
    int arr[10]={0};
    int *p=arr;
    int i=0;
    for(i=0;i<=11;i++)
    {
        //当指针指向的范围超出数组arr的范围时,p就是野指针
        *(p++)=i;    
    }
    return 0;
}
 3、指针指向的空间释放
 
#include<stdio.h>
int* test()
{
    int a=10;
    return &a;    
}
int main()
{
    int*p=test();
    *p=20;
    return 0;
}如何规避野指针
1、指针初始化
 (1)、不知道指针初始化什么地址时,直接初始化为NULL
 
#include<stdio.h>
int main()
{
    int* p=NULL;
    return 0;
}
 (2)、明确知道初始化的值
 
#include<stdio.h>
int main()
{
    int a=10;
    int* p=&a;
    return 0;
}
 2、小心指针越界
 
C语言本身是不会检查数组越界行为的
3、指针指向空间释放即时置NULL
4、指针使用之前检查有效性
#include<stdio.h>
int main()
{
    int* p=NULL;
    if(p!=NULL)//判断是否为空指针,检测是否有效
        *p=10;
    return 0;
}









