0
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;
私はこのif命令をremoveItem関数内に持っています。私はデータ漏れがどのように発生するのか分かりません。ご覧のとおり、削除するノードをdelPtrという別のポインタで指し、次にnodeptrを正しいものに設定し、delptrとその内容を削除します。したがって、このNodePtrの親は、その子として "nodePtr's rightchildptr"も見なければならないが、そうではない。BSTからノードを削除したときにデータ漏れが発生する
[Valgrind](http://valgrind.org/)とより多くのコンテキスト([mcve])を表示するのは、ここのあなたの友人です。 – user4581301
'nodePtr-> rightChildPtr'はnullでないことが許されていますか? 'nodePtr'を削除している間はどこにもコピーしないからです。それ以外の場合は、提供された制限付きコードでは特定できません。 [mcve]の表示を検討してください。 –