空指针:指针被赋值为空
例如:
- 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就是野指针

文章介绍了空指针和野指针的概念。空指针被赋值为NULL或nullptr,不能解引用。野指针可能指向未初始化的内存、已释放的栈空间或堆空间,导致不可预知的结果。文章通过例子展示了野指针在局部变量释放和手动释放内存后的情况。

被折叠的 条评论
为什么被折叠?



