为什么指针导致内存泄漏动态分配整数?

2 c++ memory pointers memory-leaks

"因为pnValue是唯一保存动态分配整数地址的变量,所以当pnValue被销毁时,不再有对动态分配内存的引用.这称为内存泄漏.因此,无法删除动态分配的整数,因此无法重新分配或重用." {引自LearnCpp.}

为什么pnValue保存动态分配的整数的地址?如果指针只指向地址,为什么破坏指针会影响地址?这是否意味着在动态分配的整数中,我们必须总是有指针,因为指针不知何故地址?

Abh*_*jit 5

已定义的所有对象都存在于内存中并具有地址.对象的地址是对象开始驻留的存储器的位置.因此,在一维存储空间中,如果对象开始驻留在槽100处,则100被称为对象的地址.

 99 100 101  102  103  104  105  106
=====================================
   | O  | B  | J  | E  | C  | T  |    
=====================================
     ^
     |
     |
 pnObject
Run Code Online (Sandbox Code Playgroud)

指针是包含其他对象地址的对象.当您动态创建对象时,它将在堆内存中创建,并且没有作用域.只要你没有,它就会继续存在;显式删除分配的内存或分配内存的程序死掉.

内存是通过c库函数mallocc++运算符动态分配的new,它返回地址,即堆内存中起始位置,对象开始驻留的位置.您应该将地址保存在变量(称为指针的特定类型)中,该变量现在保存对象的地址.

Object *pnValue = new Object();
Run Code Online (Sandbox Code Playgroud)

只要你知道堆中新创建的对象的地址,你就可以控制但是如果你忘记了地址,要么通过销毁指针变量,覆盖内容或者根本不存储地址,你就无法访问该位置并继续前进无法释放/删除分配的内存.

 99 100 101  102  103  104  105  106
=====================================
   | O  | B  | J  | E  | C  | T  |    
=====================================
Run Code Online (Sandbox Code Playgroud)