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

  • 相关阅读:
    YbtOJ#573后缀表达【二分图匹配】
    CF605EIntergalaxy Trips【期望dp】
    YbtOJ#482爬上山顶【凸壳,链表】
    AT4996[AGC034F]RNG and XOR【FWT,生成函数】
    YbtOJ#903染色方案【拉格朗日插值,NTT,分治】
    YbtOJ#832鸽子饲养【凸包,Floyd】
    YbtOJ#463序列划分【二分答案,线段树,dp】
    CF618FDouble Knapsack【结论】
    P3214[HNOI2011]卡农【dp】
    YbtOJ#526折纸游戏【二分,hash】
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10233865.html
Copyright © 2011-2022 走看看