导致运行时错误的析构函数

Destructor causing runtime error

我正在使用 Trees 进行练习。目前精确的二叉搜索树。我有一个通用的 Tree class 用来解决 BST 问题。 所以,我遇到了一个问题 tp convert the given tree (BST) into a Doubly linked list.

我能够成功地将树转换为 DLL。但是,问题是当我调用 destructor 时。 因为,我正在为树的节点分配内存,所以我也希望释放内存。 这是 Tree class ::

的析构函数
~Tree() {
        delete root;
        root = NULL;
    }

这是 Node class::

的析构函数
~Node() {
        delete left;
        delete right;
        left = NULL;
        right = NULL;
    }

所以,最后程序崩溃了! 据我了解,因为我编写的析构函数会递归地删除树的所有节点,并且当树被转换为 DLL 时,左右指针确实指向彼此,因此,在调用析构函数期间,析构函数尝试删除已被删除且该指针未设置为 NULL 的节点。 我该如何克服这个问题?由于不允许析构函数重载。

有什么办法可以防止这个运行时错误吗? 这是代码:: http://ideone.com/SDkXY9 (ideone不打印输出,不知道为什么!)

这里的问题是您正试图删除发起链式破坏的邻居。您将必须添加一个标志,您可以在析构函数中检查哪个邻居可以正常删除。

~Node() {
    _isDestructing = true;
    if (!left->_isDestructing) delete left;
    if (!right->_isDestructing) delete right;
    left = NULL;
    right = NULL;
}