c++ - 为什么在动态数组上以特定方式调用 'delete' 不起作用?

标签 c++ memory-management dynamic-arrays

我想知道为什么这段代码不起作用:

void KeyValueList::Release()
{
//(m_ppKeyValueList is a dynamic array of pointers to objects on the heap)
    if (m_ppKeyValueList) {
        for (int i = 0; i < m_iCapacity; ++i) {
            if (m_ppKeyValueList[i]) {
                delete m_ppKeyValueList[i];
            }
        }
        /*delete[] m_ppKeyValueList;*/
        for (int i = 0; i < m_iCapacity; ++i) {
            delete (m_ppKeyValueList + i);
        }
    }
}

为什么我们不能通过这种方式迭代动态数组并删除它?

最佳答案

动态数组不仅仅是一系列元素。它还包含有关数组大小的信息。此外,分配器只知道一个内存块。因此,就像任何动态内存一样,您只能释放您分配的内容,而不是它的较小子集。

这就是为什么该语言要求您仅在从 new[] 表达式获得的指针上调用 delete[],而那是唯一 释放内存的方法。

关于c++ - 为什么在动态数组上以特定方式调用 'delete' 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7576554/

相关文章:

memory - 保留的内存地址?

c# - 在类中展平数组的动态方法?

c++ - xmlReadMemory - 未知 'url' 参数

c++ - Gameboy 模拟器的播放速度比预期的要快

c - 使用声明的变量分配内存是否定义了行为?

java - Java 中有类似 malloc/free 的东西吗?

delphi - 查找动态数组均值的最简单方法

c++ - 为什么 delete[] 会导致堆损坏错误?

c++ - 这2张魔法卡能发挥的最大技能是多少?

c++ - 为什么不采用非类型偏特化元组?