野指针

野指针

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

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 \n", 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 \n", p);

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

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

 

posted on 2019-01-07 16:12 锋邢天下 阅读(...) 评论(...) 编辑 收藏

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值