zoukankan      html  css  js  c++  java
  • 野指针

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

    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;
      }

  • 相关阅读:
    BZOJ 2588
    BZOJ 3524
    BZOJ 3932
    Bzoj1013--Jsoi2008球形空间产生器
    Codevs1743--反转卡片
    Bzoj1208--Hnoi2004宠物收养所
    Bzoj1112--Poi2008砖块Klo
    后缀自动机学习笔记
    Bzoj1588--Hnoi2002营业额统计
    Bzoj1056--Haoi2008排名系统
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10233865.html
Copyright © 2011-2022 走看看