我正在写一个基本的 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.