指针之野指针系列(1):什么是野指针

简介: 指针之野指针系列(1):什么是野指针

指针之野指针系列! 对于指针大家或许知道不少,甚至能款款道来指针的定义,内容,书写方式.......一系列书本上可以获得的知识,但是对于野指针,不知道大家又能知道多少呢??


对于野指针,已经笼统化,甚至有读者仅仅知道野指针,但是对于野指针是什么,却没有详细的自我观点,仅仅人云我亦云罢了!


下面请看笔者带领大家来认识野指针!


野指针顾名思义!着重在于“野”字:正如野狗一样,看不见时候,或许会直接咬上来,打的措手不及!


因此野指针泛指:指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)!


对于野指针的定义,我想大家也都能理解看清楚!


下面来看看野指针的成因:


1.指针未初始化


  下面笔者用代码来带领大家进行分析:


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

在该段代码中,指针并没有进行初始化:但是进行了报错,因此指针未初始化:这样是运行不出来的!


0a2653c851af460fa595bd959398a8f1.png


下面,笔者来带领大家对该段代码进行分析:


对于  int* p;   这里面的p未进行初始化,指局部变量未进行初始化,默认为随机值! 因此p就是野指针,但是这个随机值作为一个地址,所管理的一片空间,并不属于当前程序!因此通过:   *p = 20;   将20赋值给*p出现了错误!所以程序运转不出来!


2.指针越界访问


  下面笔者用代码来带领大家进行分析:因为代码能够更好的反应出情况!


#include <stdio.h>
int main()
{
  int arr[10] = { 0 };
  int i = 0;
  int* p = arr;
  for (i = 0; i <= 10; i++)
  {
  *p = i;
  p++;
  printf("%d ", arr[i]);
  }
  return 0;
}


在该段代码中,数组进行越界访问!通过for循环,for (i = 0; i <= 10; i++)   访问了不属于该数组的arr[10],因此导致程序崩溃!


6de278e6d6694ce5bb08e7e842b7e74b.png


在这该段代码里面,直接导致程序崩溃,其实只要保持不越界访问,便很少出现这样的情况!


3.指针指向空间的释放!


该内容由于涉及知识较为广泛,而笔者此时并没有涉及,因此不做过多解释,若有转牛角尖的读者,请绕道参考其他博主内容!在此,笔者不做过多讲叙!


上述笔者讲解了对于野指针的成因,我想读者应该也有着大概的认识,但是对于如何规避野指针问题,请参考笔者下篇博文!


相关文章
|
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). 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常指的是指针变量