• 指针之野指针系列(2):如何规避野指针


    指针之野指针系列(2):如何规避野指针!

    对于野指针的成因,部分由笔者上篇博文吸引而来的读者已经知道并且理解,但是对于部分由外网搜索而来的读者可能不是很理解,因此可以参考一下笔者上篇博文:指针之野指针系列(1):什么是野指针!

    因此这篇博文,笔者带领大家来认识了解,并且能够有效的规避野指针!

    想要正确的规避野指针,其实也只能从源头上来寻找问题来源,并且找出解决办法!

    总而言之:对于如何规避野指针问题:大概只有一下几种方法来解决!

    1.指针初始化

    2.小心指针越界

    3.指针指向空间的释放,及时置NULL;

    4.避免返回局部变量的地址;

    5,指针使用之前检查有效性;

    其实主要还是在于程序员自己细不细心了!

    下面来细细分析一下:建议根据笔者上篇博文来一块进行阅读这篇博文,这样更能深刻理解笔者想要表达的内容!

    1.指针初始化

    1. int a=10;
    2. int *pa=&a;

    对于指针pa有着明确的初始化类型,指向a;

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. int* pa = &a;
    6. printf("%d\n", *pa);
    7. return 0;
    8. }

    对于这样的代码,一看就是正确的,编译器也不会舍得给报错的!

     因此,指针初始化,显得尤为重要!

    2.小心指针越界

      这个就是需要读者自己来分析所写的代码,或者肉眼观看,或者进行调试,但是对于调试所需要的一些小小的快捷键,需要读者进行一定的认识与了解!然后需要注意的就是笔者上篇博文举列子中的错误:for(i=0;i<=10;i++)在这里表现出的结果就是明显的数组越界访问!导致程序崩溃

    对于下面三个规避野指针的方法!

    笔者通过对第五条5,指针使用之前检查有效性;来进行合一块详解!

    检查有效性,顾名思义,就是指针万一不能用??因此需要我们来进行对有效性的检查!

    1. #include
    2. int main()
    3. {
    4. int* p = NULL;
    5. if (p != NULL)
    6. {
    7. printf("%d\n", *p);
    8. }
    9. return 0;
    10. }

    在这里面  int* p = NULL; //置空   NULL------>0  就是专门用来初始化指针的!

    在上述代码中,将p进行NULL置空,因此,在if语句的判断中,表达式为0;并没有任何的输出结果!

     但如果不将*p进行NULL置空,将会出现程序报错的结果!直接不能运行,因此,及时将指针进行NULL置空,也是很有必要的!

     下面在根据一个代码来进行说明及时NULL置空,也是很有必要的选择!

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. int* p = &a;
    6. if (p != NULL)
    7. {
    8. printf("%d\n", *p);
    9. }
    10. return 0;
    11. }

    在这里用  : 
        if (p != NULL)    语句来进行判断,如果成立则输出,否则,则不输出任何结果!

    到此为止!笔者已经将:如何规避野指针问题,讲解完毕,若有不足之处,请联系笔者来进行更改!

  • 相关阅读:
    如何找出你的Windows 10的内部版本和版本号?这里提供两种方法
    c++学习MFC还是QT?
    python 服务器批处理得到PSSM矩阵
    postman教程-13-关联接口调用
    LS1046nfs挂载文件系统
    vue中的ref属性
    nodejs学习week01
    降维(Dimensionality Reduction)
    《golang设计模式》第二部分·结构型模式-06-享元模式(Flyweight)
    PowerBI工作区连接Log Aanlytics
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/126212164