在c++中产生野指针的情况
1.未初始化的指针
当我们在声明一个指针的时候但没有赋值时,它就是一个野指针
int *ptr ; //未初始化指针
2.删除内存后未置空
当动态分配内存被delete或者free后, 如果没有将指针置为 “nullptr” 或者 NULL 导致指针仍然指向原来的内存地址,此时的地址已经不在有效,指针成为野指针 。
int *ptr = new int (10) ;
delete ptr ; //ptr 现在是野指针
3.指针超出了作用域
如果一个指针指向一个局部的变量地址,一旦局部变量的作用域结束,该内存可能会被回收,指针成为野指针
int *ptr ;
{
int temp = 42 ;
ptr = &tmp ;
} //tmp 的作用域结束, ptr变成野指针
4. 指向已经释放的内存
如果有多个指针指向同一块动态分配的内存,释放这些内存后,其他仍然指向该内存的指针变成野指针
int *ptr = new int (10) ;
int * ptr2 = ptr1 ;
delete ptr1 ;
//ptr1 和ptr2 都变成野指针
5.指针算数错误
如果通过指针算数(如递减或者递增指针) 使其超出了指向的内存范围, 这样的指针也会变成野指针
所以我们在使用指针时要确保使用前被初始化,使用完之后及时的删除或者置空 。