我在寫一個基本的List類。它由一個數組支持,而不是一個向量,因爲我們不允許使用向量。刪除,自定義列表上的C++堆損壞
當我在內部支持陣列上調用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--;
}
List.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;
}
}
有誰知道這是爲什麼出現?
據this useful post,它說:
「大多數堆損壞是由(A)調用刪除次數太多(B)調用了錯誤的形式刪除,或(C)訪問引起了堆分配array out of bounds。「
我只是不確定A,B或/和C是否爲真。我是否在刪除後調用刪除?我不這麼認爲。我也認爲我正在調用正確的刪除形式:刪除括號。我當然希望不是C.
什麼是數組?它沒有在任何地方定義。 – Mic 2013-02-09 07:17:53
對不起,在接下來的幾分鐘裏要大量編輯,只是想先提出問題。 – Jason 2013-02-09 07:18:26
考慮一下你在'i == Count-1'時分配的索引,然後你跳過了一些東西。 – Mat 2013-02-09 07:19:10