修改後我有下面的類和代碼:C++堆警告:免費堆塊就被釋放
template <class T>
class HashTable {
struct Pair{
T element;
int key;
Pair(T element, int Key) : element(element), key(key) {};
};
int table_size;
int counter;
List<Pair> (*elements);
void changeTableSize(int newSize){
List<Pair> *temp = new List<Pair>[newSize];
for (int i = 0; i < table_size; i++){
for (typename List<Pair>::Iterator j = elements[i].begin(); j != elements[i].end(); j++){
Pair p = *j;
temp[p.key % newSize].insert(Pair(p.element, p.key));
}
}
delete[] elements;
elements = temp;
table_size = newSize;
}
public:
HashTable() : table_size(100), counter(0){
elements = new List<Pair>[table_size];
};
void insert(T data, int key){
if (member(key)){
throw ElementAlreadyExists();
}
elements[key % table_size].insert(Pair (data, key));
counter++;
if (counter == table_size){
changeTableSize(table_size*2);
}
};
當我打電話changeTableSize()的第一次,一切都很好。當我第二次調用它時,我的程序在分配temp後正好說「警告:HEAP:釋放後在006618D4修改的自由堆塊006618C0」。什麼會導致這種情況?
您不能使用'elements'而無需初始化它。 –
您刪除*元素*,然後將* temp *賦值給它。 – SChepurin
@LuchianGrigore元素在這裏未顯示的構造函數中初始化。 –