Когда я запустить деструктор я получаю пробег не удался, и я не знаю, почему здесь моего дерево заголовокс деструктором ++ для двоичного дерева
class ExpressionTree {
private:
ExpressionNode* root;
public:
ExpressionTree() :
hashmap(100000),
root(NULL) {
};
virtual ~ExpressionTree(){
helper(root);
}
void helper(ExpressionNode *node) {
if (!node) {
return;
} else {
helper(node->getLeft());
helper(node->getRight());
delete node;
}
}
};
и заголовок моего узла
class ExpressionNode {
private:
ExpressionNode* left;
ExpressionNode* right;
string data;
public:
virtual ~ExpressionNode(){
delete left;
delete right;
}
};
Теперь все отлично работает, если в классе ExpressionTree я уничтожаю только корень, но я считаю, что я утечка памяти таким образом. Это на самом деле правильный путь или что-то не так с моим рекурсивным разрушением.
Вы удаляете память дважды. Не делай этого! И инициализируйте ваши указатели на 'nullptr', иначе вы попытаетесь удалить случайную память. – tkausl