空指针
一个被赋值为0的指针,它不指向任何的对象或者函数。注意:指向内存编号为0的空间是空指针,当初始化指针变量,如果刚开始不知道指向那 就给他初始化指向0编号,但是空指针指向的内存是不可以访问(0到255之间是系统占用的内存用户不可以访问)。
空指针定义
int *p=nullptr;//C++
int *p=NULL;//C
用户对空指针进行操作时会引发异常,因此对指针进行操作时,要对指针进行非空判断
if(p==nullptr){
return ;//指针为空时,直接返回,避免程序崩
}
*p=...;
野指针
野指针指向一段实际的内存,但不知道它的实际指向,或者是它所指向的内存空间已经被释放,在实际使用的过程中,无法有效的识别一个指针是否为野指针。需要自己在编程过程中规范编程,避免野指针的产生。
1.指针未被初始化
int *p;
*p=1;//操作指针指向内存之前,指针未指向合法空间❌
2.指向堆内存被释放
int *p=new int(1);
delete p;
//堆上开辟空间被释放,p成为野指针
3.指针指向局部变量,操作超出作用域
int *p=nullptr;
{
int a=0;
p=&a;
}
//此时超出局部变量a的作用域,变量a将释放,指针p成为野指针