Lange Rede kurzer Sinn, ich muss eine Hashtabelle mit linearem Hashing in C++ für die Universität kodieren. Die Hashtabelle funktioniert, aber die Ressourcen werden nicht freigegeben, was ein Problem darstellt, insbesondere, dass der Komponententest die Tabelle mit 100k + Werten testet und der zurückgelassene Müll riesig ist. Grundsätzlich, wenn ich den neuen Hash-Tabelle bin die Schaffung ich folgendes tue:Wie lösche ich ein dynamisches Array von Objekten mit Zeigern zu anderen Objekten (C++)
hashTable = new Bucket[this->tableSize];
for (size_t i = 0; i < tableSize; i++) {
hashTable[i] = * new Bucket();
}
Jeder Eimer kann einen Zeiger auf einen anderen Überlauf Eimer enthalten, die so eingestellt werden kann oder nicht.
class Bucket {
private:
size_t bucketSize;
size_t elementsInBucket;
E v[N]; // int v[N];
bool hasOverflow;
Bucket * nextBucket = nullptr;
Meine Frage ist, wie kann ich die ganze hashtable einschließlich der Eimer mit ihren potentiellen Überlauf Eimer löschen, wie die folgenden nur die Hälfte des belegten Speicher freigibt.
delete[] hashTable;
hashTable = nullptr;
Vielen Dank!
Ein 'Bucket' ist im Wesentlichen nur ein Knoten einer verketteten Liste. Was ist der übliche Weg, um eine verknüpfte Liste zu löschen? – rwols
Ich sehe keinen Destruktor für 'Bucket'. – Logicrat
'virtuelle ~ Bucket() { löschen nextBucket; } 'Wenn ich den Destruktor code, bricht das Programm und ich bekomme eine EXC_BAD_ACCESS beim Expandieren des Arrays. – cookiemonster