• 技术文章 >C语言 >C语言教程

    c语言野指针产生的原因

    小妮浅浅小妮浅浅2021-10-12 09:44:31原创5059

    1、指针变量未初始化,任何指针变量刚被创建时不会自动成为 NULL 指针,它的缺省值是随机的。

    所以,指针变量在创建的同时应当被初始化,要么将指针设置为 NULL ,要么让它指向合法的内存。

    #include <stdio.h>
    void Swap(int *p1,int *p2)
    {
     int *tmp;
     *tmp=*p1;
     *p1=*p2;
     *p2=*tmp;//*p1指向了无效地址,程序会给出警告,使用了未初始化的局部变量tmp,*tmp的值无法被访问,因为tmp未初始化,它的地址是个随机值(0xcccccccc)
    }

    如果没有初始化,编译器会报错‘point’ may be uninitializedin the function。

    2、指针释放后之后未置空。

    指针在 free 或 delete 后未赋值 NULL ,它们只是把指针所指的内存给释放掉,但并没有处理指针本身。此时指针指向不可知的(随机的、不正确的、没有明确限制的)。

    释放后的指针应立即将指针置为NULL,防止产生野指针。

    int main()
    {
     char  *p;
     p=(char*)malloc(10);
     printf("%s\n",p);
     if(p!=NULL)
     {
     free(p);
     }
    free(p);//再次释放p时,因为前面已经被释放了一次,再次释放会报错
    return 0;
    }

    以上就是c语言野指针产生的原因,希望对大家有所帮助。更多C语言学习指路:C语言教程

    本教程操作环境:windows7系统、C11版,DELL G3电脑。

    专题推荐:c语言 野指针
    品易云
    上一篇:c语言中函数的声明和定义 下一篇:c语言中常规函数和指针函数区别

    相关文章推荐

    • c语言中空指针是什么• c语言void*指针是什么• C语言中内联函数是什么• c语言内联汇编如何理解• c语言strcat_s函数如何使用• c语言strcat_s函数的原理• c语言中如何计算数组长度• c语言中的指针是什么• c语言中数组访问越界如何理解• c语言中如何防止数组下标越界• c语言中函数的理解• c语言中函数参数类型的探究• c语言中函数的声明和定义

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网