2 c++ memory pointers memory-leaks
"因为pnValue是唯一保存动态分配整数地址的变量,所以当pnValue被销毁时,不再有对动态分配内存的引用.这称为内存泄漏.因此,无法删除动态分配的整数,因此无法重新分配或重用." {引自LearnCpp.}
为什么pnValue保存动态分配的整数的地址?如果指针只指向地址,为什么破坏指针会影响地址?这是否意味着在动态分配的整数中,我们必须总是有指针,因为指针不知何故是地址?
已定义的所有对象都存在于内存中并具有地址.对象的地址是对象开始驻留的存储器的位置.因此,在一维存储空间中,如果对象开始驻留在槽100处,则100被称为对象的地址.
99 100 101 102 103 104 105 106
=====================================
| O | B | J | E | C | T |
=====================================
^
|
|
pnObject
Run Code Online (Sandbox Code Playgroud)
指针是包含其他对象地址的对象.当您动态创建对象时,它将在堆内存中创建,并且没有作用域.只要你没有,它就会继续存在;显式删除分配的内存或分配内存的程序死掉.
内存是通过c库函数malloc或c++运算符动态分配的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)
| 归档时间: |
|
| 查看次数: |
1923 次 |
| 最近记录: |