从BST删除节点时发生数据泄漏

时间:2016-11-03 16:26:06

标签: c++ algorithm memory-leaks

if(parent!=NULL)
{
    if((parent->leftChildPtr)==nodePtr)
    {
        parent->leftChildPtr=nodePtr->leftChildPtr;
    }
    else if(parent->rightChildPtr==nodePtr)
    {
        parent->rightChildPtr=nodePtr->leftChildPtr;
    }
}
    delPtr = nodePtr;
    nodePtr = nodePtr->leftChildPtr;
    delPtr->leftChildPtr = NULL;
    delete delPtr;

我的removeItem函数中有if语句指令。我不知道数据泄漏是如何发生的。如您所见,我将节点指向要删除的另一个指针,即delPtr,然后将nodeptr设置为它,并删除delptr及其内容。所以这个NodePtr的父节点应该看到" nodePtr'右子节点"作为它的孩子,但没有。

1 个答案:

答案 0 :(得分:0)

您需要显示更多代码,但在我设置nodePtr时,我似乎很可能不会更新父节点的相应子指针。所以它仍然保留了nodePtr的前一个值,它现在已经被删除了。