码迷,mamicode.com
首页 > 其他好文 > 详细

野指针

时间:2019-01-07 17:41:28      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:c内存   技术   程序   free   不可用   har   bubuko   int   str   

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

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

 

野指针

标签:c内存   技术   程序   free   不可用   har   bubuko   int   str   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!