野指针、悬空指针

野指针产生的原因:

  • 1.指针定义时未被初始化:指针在被定义的时候,如果程序不对其进行初始化的话,它会随机指向一个区域,因为任意指针变量(出了static修饰的指针)它的默认值都是随机的
  • 2.指针被释放时没有置空:指针指向的内存空间在用free()和delete释放后,如果没有对其进行置空或者其他赋值操作的话,就会成为一个野指针
  • 3.指针操作超越变量作用域:不要返回指向栈内存的指针或者引用,因为栈内存在函数结束的时候会被释放。

野指针的危害:

问题:指针指向的内容已经无效了,而指针没有被置空,解引用一个非空的无效指针是一个未被定义的行为,也就是说不一定导致错误,野指针被定位到是哪里出现问题,在哪里指针就失效了,不好查找错误的原因。

规避方法:

  • 1.初始化指针的时候将其置为nullptr,之后对其操作。
  • 2.释放指针的时候将其置为nullptr。
 
悬空指针(Dangling Pointer):一个指针的指向对象已被删除,那么就成了悬空指针。

 

posted @ 2021-02-19 14:27  zeroPatrick  阅读(250)  评论(0)    收藏  举报