野指针和内存泄漏

 野指针可能会造成内存泄漏,内存泄漏不一定就是野指针造成的(注,野指针不是一定会造成内存泄漏,如果它随机指向的是一个变量地址,则就不会造成内存泄漏了)

内存泄漏:

  • 定义:程序中已动态分配的堆内存由于某种原因,程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果
  • 造成内存泄漏的原因有两点:对象没有被释放、循环引用

野指针:

  • 定义:如果内存已经释放,而指针还在引用原始内存,这样的指针就称为野指针,也称作迷途指针。野指针不是nil指针,是指向”垃圾”内存(不可用内存)的指针
  • 野指针产生原因:
  1. 指针变量未初始化
    任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的。所以指针变量在创建的同时应当被初始化,要么将指针置为NULL,要么让它指向合法的内存
  2. 指针释放后未置空
    指针在free或delete后未赋值NULL,此时指针指向的就是“垃圾”内存
  3. 指针操作超越变量作用域
    不要返回指向栈内存的指针或引用,因为栈内存 在函数结束时会被释放

野指针和内存泄漏