野指针

野指针就是指向无效地址的指针。 一般有三种情况导致野指针问题:

1 引用未初始化的指针变量

  # include <stdio.h>
  int main(void)
  {
    int i = 3;

    int *j; 
    *j = i; //指针j还未初始化,即指针j指向0XCCCCCCCC内存空间,该地址应用程序无权访问,使用 *j试图往这个内存空间中写数据时,程序运行后会报错
    return 0;
  }  

2 引用被赋值为NULL的指针变量 

  # include <stdio.h>
  int main(void)
  {
    int i = 3;

    int *j = NULL; //NULL指向内存中地址为0的空间 0x00000000。
    *j = i; //0x00000000空间是不可用的,往该内存空间写数据也是非法的,运行会报错
    return 0;
  }  

3 free指针后未把指针置成NULL 

  int main(void)
  {
    char *p;
    p = (char*)malloc(20);
    strcpy(p, "hello");
    printf("%s ", p);

    if(p != NULL)
    {
      free(p);  //这儿已经释放了p指向的内存空间。但是p指向的内存地址还没有变,这儿可能会存放别的有用数据
    }
    free(p); //p指向的内存地址还没有变,再次释放会报错
    return 0;
  }

  运行结果如图:

  

PS: free释放指针指向的内存空间后,一定要把指针置为NULL。代码如下:

   int main(void)
  {
    char *p;
    p = (char*)malloc(20);
    strcpy(p, "hello");
    printf("%s ", p);

    if(p != NULL)
    {
      free(p);  

      p = NULL; //free释放指针指向的内存空间后,一定要把指针置为NULL
    }
    free(p); 
    return 0;
  }

原文地址:https://www.cnblogs.com/fengxing999/p/10233865.html