空指针:指针被赋值为空
例如:
- int* p = nullptr;
- int* p = NULL;
空指针指向的地址是00000000,但空指针不可以解引用
野指针:指针指向了不可控的位置
例如:
-
未初始化
int* p; //野指针 -
越界访问
int intArr[5]{0, 1, 2, 3, 4};
int* p = &intArr[5]; //野指针 -
指向被释放的空间
第一种情况,局部变量被释放
string* uArr[2]{};
void Test()
{
string a = “abc”; //局部变量,存放在栈中,函数结束就释放空间
uArr[0] = &a;
cout << uArr[0] << endl; //这里能打印出abc
}
Test();
cout << uArr[0] << endl; //这里已经是野指针了第二种情况,delete
int* p =new int;
delete p; //释放p所在的空间
cout << p << endl; //这是p就是野指针