当前位置: 首页 > 知识库问答 >
问题:

为什么指针会对动态分配的整数造成内存泄漏?

柯昱
2023-03-14

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

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

共有3个答案

袁良弼
2023-03-14

指针不指向地址,而是存储地址。据说它们“指向”对象。它们指向的对象是位于它们存储的地址中的对象。

想想地址簿。每个条目都是指向你的一个朋友的指针(你的朋友是对象)。假设你的朋友遍布全国(你电脑的内存),而你的内存是垃圾。所以你需要你的通讯录才能找到你的朋友。如果你丢失了地址簿的一页(指针被破坏),地址在该页上的朋友也会丢失给你。也就是说,除非你有一个备份副本(更多的指针持有相同的地址)。

夏侯和韵
2023-03-14

指针“只要指向地址”。这就是说,如果你删除了所有指向那个地址的指针,就没有办法“到达”存储在那里的内存来删除/释放它。一旦没有指针“指向”那个位置,你就没有办法再清理那个内存了,所以你就有了一个漏洞。

销毁指针不会产生泄漏-如果有另一个指针可以用来访问内存以清理它。如果没有其他指针保留,销毁指针只会删除访问该内存的能力。

郎祯
2023-03-14

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

 99 100 101  102  103  104  105  106
=====================================
   | O  | B  | J  | E  | C  | T  |    
=====================================
     ^
     |
     |
 pnObject

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

内存是通过c库函数< code>malloc或< code>c 运算符< code>new动态分配的,该运算符返回地址,即堆内存中对象开始驻留的起始位置。您应该将地址保存在一个变量中(一种称为指针的特殊类型),该变量现在保存对象的地址。

Object *pnValue = new Object();

只要您知道新创建的对象在堆中的地址,您就拥有控制权,但是如果您忘记了地址,无论是通过销毁指针变量、覆盖内容还是不存储地址,您都无法访问该位置,并且以后也无法释放/删除分配的内存。

 99 100 101  102  103  104  105  106
=====================================
   | O  | B  | J  | E  | C  | T  |    
=====================================
 类似资料:
  • 我有一个func添加两个NO并返回(a+B)。然后我创建了一个指向func的func指针。希望为该函数指针的数组分配内存并访问它们。代码如下。 我的问题是使用malloc的下面一行: 编译时,sizeof(add_2nos*)和sizeof(add_2nos)没有任何区别。如果有什么区别??另外,如果类型转换是必要的,而我正在分配相同类型的内存…?

  • 我想知道何时或是否必须删除此对象。下面是一个基本类对象Object.cpp的构造函数: 我知道在分配内存时,你应该在某个时候删除它,但是我在构造函数中分配了内存,并且想再次使用变量1和2,我什么时候删除它们?

  • 我正在玩rxjava,发现如果在活动被销毁之前没有完成订阅,则存在内存泄漏的风险,因为“可观察对象保留对上下文的引用”。如果订阅没有取消订阅,则此类情况的演示之一如下所示。已销毁(来源:https://github.com/dlew/android-subscription-leaks/blob/master/app/src/main/java/net/danlew/rxsubscriptions

  • 问题内容: 当您知道on上对象/项目的确切数量时,我非常想知道哪种内存分配方法对性能(例如,运行时间)有利,这对性能有好处。少量对象(少量内存)和大量对象(大量内存)的成本。 与 请告诉我。谢谢。 注意:我们可以对此进行基准测试,并且可能知道答案。但是我想知道解释这两种分配方法之间性能差异的概念。 问题答案: 静态分配将更快。静态分配可以在全局范围和堆栈上进行。 在全局范围内,静态分配的内存内置在

  • 本文向大家介绍PHP对象递归引用造成内存泄漏分析,包括了PHP对象递归引用造成内存泄漏分析的使用技巧和注意事项,需要的朋友参考一下 通常来说,如果PHP对象存在递归引用,就会出现内存泄漏。这个Bug在PHP里已经存在很久很久了,先让我们来重现这个Bug,示例代码如下: 运行以上代码,你会发现,内存使用量本应该不变才对,可实际上却是不断增加,unset没有完全生效。 现在的开发很多都是基于框架进行的