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

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

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


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


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


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


1.指针初始化


2.小心指针越界


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


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


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


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


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


1.指针初始化


int a=10;
int *pa=&a;

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


#include <stdio.h>
int main()
{
  int a = 10;
  int* pa = &a;
  printf("%d\n", *pa);
  return 0;
}

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


0a2653c851af460fa595bd959398a8f1.png


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


2.小心指针越界


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


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


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


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


#include <stdio.h>
int main()
{
  int* p = NULL;
  if (p != NULL)
  {
  printf("%d\n", *p);
  }
  return 0;
}

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


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


6de278e6d6694ce5bb08e7e842b7e74b.png


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


12c3b7f3f8814309a195c64f051d4445.png


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


#include <stdio.h>
int main()
{
  int a = 10;
  int* p = &a;
  if (p != NULL)
  {
  printf("%d\n", *p);
  }
  return 0;
}

在这里用  :

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


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


相关文章
|
4月前
|
C++ 数据格式
野指针操作导致的崩溃:lua层持有已经被释放的node指针,再次操作导致崩溃
野指针操作导致的崩溃:lua层持有已经被释放的node指针,再次操作导致崩溃
63 0
|
7月前
C初阶--指针初阶(上):什么是指针+指针类型+野指针(下)
C初阶--指针初阶(上):什么是指针+指针类型+野指针(下)
|
7月前
|
存储 Perl
C初阶--指针初阶(上):什么是指针+指针类型+野指针(上)
C初阶--指针初阶(上):什么是指针+指针类型+野指针(上)
|
2月前
|
安全 程序员 编译器
了解野指针与assert断言 拿捏指针的使用!
了解野指针与assert断言 拿捏指针的使用!
|
2月前
|
安全 程序员 编译器
[C语言]指针进阶之野指针与assert断言
[C语言]指针进阶之野指针与assert断言
|
3月前
|
C++
C++野指针 空指针 危险指针
C++野指针 空指针 危险指针
|
6月前
|
存储 算法 编译器
指针(一)------指针概念+指针类型+野指针+指针运算+二级指针
指针(一)------指针概念+指针类型+野指针+指针运算+二级指针
47 0
|
7月前
|
存储 C语言
C语言之指针的含义,指针类型的定义及使用方法,野指针的定义,以及原因,如何避免野指针
C语言之指针的含义,指针类型的定义及使用方法,野指针的定义,以及原因,如何避免野指针
|
10月前
学C的第十七天【指针初阶: 1. 指针是什么?;2. 指针和指针类型;3. 野指针;4. 指针运算】2
3. 野指针 概念:野指针就是这种指向的位置时不可知的(随机的、不正确的、没有明确限制的)
|
10月前
|
存储
学C的第十七天【指针初阶: 1. 指针是什么?;2. 指针和指针类型;3. 野指针;4. 指针运算】1
1. 指针是什么? (1). 指针是内存中一个最小单元的编号,也就是地址 (2). 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常指的是指针变量