-1

我正在写一个基本的 List 类。它由数组支持,而不是向量,因为我们不允许使用向量。

delete[]当我调用我的内部支持数组时,我似乎遇到了堆损坏问题。

template <typename T>
void List<T>::Remove( int elementIndex )
{
    // Here, I'm creating a new array of one less size to copy all elements over
    T* newArray = new T[Count - 1];
    bool skippedElement = false;

    for (int i = 0; i < Count; i++)
    {
        if (i == elementIndex)
                skippedElement = true;

        newArray[i] = array[ skippedElement ? i + 1 : i ];
    }

    delete[] array; // Heap corruption!  See below for definition of array
    array = newArray;

    Count--;
    Capacity--;
}

列表.h

class List
{
    ...
    private:
    T* array;
    ...

    template <typename T>
    List<T>::List( void )
    {
        array = new T[1];
    }

    template <typename T>
    List<T>::~List( void )
    {
        delete[] array;
    }
}

有人知道为什么会这样吗?

根据这个有用的帖子,它说:

"大多数堆损坏是由 (A) 调用 delete 太多次 (B) 调用错误形式的 delete 或 (C) 访问堆分配的数组超出范围造成的。 "

我只是不确定 A、B 或/和 C 是否正确。我是在删除后调用删除吗?我不这么认为。我也认为我正在调用正确的删除形式:带括号的删除。我当然希望不是 C.

4

1 回答 1

3

在你的 for 循环中,你没有迭代Count次数。但是您的新数组只能Count - 1包含多个元素。这会导致堆损坏。

于 2013-02-09T07:22:55.800 回答