【问题标题】:Resetting dynamic array with another new statement, need delete first?用另一个新语句重置动态数组,需要先删除吗?
【发布时间】:2017-09-04 23:38:32
【问题描述】:

如果我有类似的东西

int* thing;

thing = new int[10]

(more code...)

thing = new int[50];

我需要在他们之间做delete[] thing吗?为了确保/安全,因为我无论如何都要发帖,这样做没有任何问题吗?

【问题讨论】:

  • 是的。否则new int[10]分配的内存会被泄露。
  • 每个new 必须由delete 平衡,每个new[] 必须由delete[] 平衡。

标签: c++ arrays memory-management dynamic


【解决方案1】:

为了安全起见,您应该始终删除分配在堆上的内存,否则会出现内存泄漏,这在将来可能导致内存紧缩并可能导致您的应用程序崩溃。

//在堆栈上分配内存(堆栈内存一旦超出范围就会被删除,由编译器自动删除)

int* thing;   

//堆上分配10个数组(堆内存由用户负责删除,否则会出现内存泄漏)

thing = new int[10]

//理想情况下你应该在这里删除分配在堆上的内存,否则会出现内存泄漏,这可能会导致将来的内存紧缩:

(more code...)
delete []thing;

thing = new int[50];

【讨论】:

    【解决方案2】:

    每当您使用new 在堆中分配内存时,您需要在某个时候使用delete 释放该内存。如果不这样做,会导致内存泄漏。想象一下,您为thing 分配了 10 个空格,然后用 50 个空格“覆盖”它。这 10 个原始空间在您的记忆中某处丢失并且永远不会被释放(这很糟糕)。

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 2012-01-26
      • 1970-01-01
      相关资源
      最近更新 更多