1.空指针
空指针类型是void*,它指向任何类型的对象,它是个指针,与地址有关系,不知道内容什么数据类型,当取空类型指针所指向的值的时候,应将空类型指针转换为对应的指针类型。否则直接使用将会发生错误。
1)空指针支持的操作
a. 与另一个指针比较
b. 向函数传递void *指针
c. 在函数里返回void *指针
d. 给另一个void *指针赋值
2)空指针不支持的操作
a. 不支持解引用,不能获取指向对象的值
b. 不能进行指针运算,比如移位操作
2.野指针
指向一个非法的或已销毁的内存的指针,对系统造成不可预知的危险错误
产生原因:
1.指针在定义的时候没有初始化,它的缺省值是随机的,下面指针没有初始化,但是对他进行赋值,程序是不会奔溃的。
#include <stdio.h>
int main()
{
int b = 1;
int* a;
*a = b;
return 0;
2.指针p被free或者delete之后,只是把指针所指的内存释放掉了,没有改变指针的值,此时,p沦落为野指针
3.当指针被去引用的赋值的时候,当变量释放的时候,指针也就变成野指针。
A *p;
{
A a;
p = &a;
}
避免:
该当指针指向的内存被释放时,我们也应该将指针置空
参考:
https://blog.csdn.net/qq_33757398/article/details/81259636
https://www.cnblogs.com/fly1988happy/archive/2012/04/16/2452021.html