Короче говоря, мне нужно закодировать хэш-таблицу с использованием линейного хэширования на C++ для университета. Хэш-таблица работает, но ресурсы не освобождаются, что является проблемой, особенно, что модульный тест проверяет таблицу со значениями 100 к +, а оставшийся мусор огромен. В принципе, когда я создаю новый Hashtable я делаю следующее:Как удалить динамический массив объектов с указателями на другие объекты (C++)
hashTable = new Bucket[this->tableSize];
for (size_t i = 0; i < tableSize; i++) {
hashTable[i] = * new Bucket();
}
Каждый ковш может содержать указатель на другой перепускной ведро, которое может или не может быть установлен.
class Bucket {
private:
size_t bucketSize;
size_t elementsInBucket;
E v[N]; // int v[N];
bool hasOverflow;
Bucket * nextBucket = nullptr;
Мой вопрос, как я могу удалить всю хеш-таблицу, включая ковши с их потенциальными ведрами перелива в следующем только освобождает половину занимаемой памяти.
delete[] hashTable;
hashTable = nullptr;
Спасибо!
«Ведро» по существу является лишь узлом связанного списка. Итак, какой обычный способ удалить связанный список? – rwols
Я не вижу деструктора для 'Bucket'. – Logicrat
'virtual ~ Bucket() { delete nextBucket; } 'Если я кодирую деструктор, программа прерывается, и я получаю EXC_BAD_ACCESS при расширении массива. – cookiemonster