C ++失败“被称为纯虚函数”

时间:2017-03-28 02:04:22

标签: c++ object memory-leaks

我正在编写一些代码以从AVL树中删除。这是一个有助于删除的示例函数:

int AVL::getLargestAndTrim(Node*& currentNode, Node* parentNode) {
    if (currentNode->right == nullptr) {
        int returnData = currentNode->data;
        parentNode->right = currentNode->left;
        delete currentNode;
        return returnData;
    }
    else {
        Node* rightChild = currentNode->right;
        return this->getLargestAndTrim(currentNode->right, currentNode);
    }
}

该代码一直失败,消息“称为纯虚方法” 在没有活动异常的情况下终止调用“。

现在,如果我更换行

return this->getLargestAndTrim(currentNode->right, currentNode);

return this->getLargestAndTrim(rightChild, currentNode);

它工作正常。怎么样?

编辑: Node类定义为:

class Node {
    public:
        Node() {}
        Node(int data) : data(data) {}

        ~Node() {}

    private:
        int data = 0;
        Node* left = nullptr;
        Node* right = nullptr;

        int height = 0;

    friend class AVL;
};

1 个答案:

答案 0 :(得分:1)

你的序列

parentNode->right = currentNode->left;
delete currentNode;

错了。由于currentNode是对parentNode->right的引用,因此当您进行该分配时,它会更改currentNode的值,然后删除currentNode->left中的内容,同时使用悬空指针树指向已删除的数据。

稍后,当为删除的对象调用析构函数时,您将收到错误。