2 つの二分探索木が等しいかどうかをテストするコードを書いています。
ただし、メモリの割り当てを解除するたびに、アクセス違反エラーが発生します。調べてみると、解放関数でメモリ アドレス 0xfeefee にアクセスしていることがわかりました。Cell デストラクタ関数でアクセス違反が発生しています。
また、この機能が機能するかどうかはわかりませんが、そのために助けを求めているわけではありませんが、助けていただければ幸いです。
解放機能:
~Cell(void) {
if (left) { delete left; }
if (right) { delete right; }
}
関数:
bool BST::isEqualTo(const BST& that) const{
if(root <= 0 && that.root <= 0){
return true;
}else if(root <= 0 || that.root <= 0){
return false;
}
if(root->val != that.root->val){
false;
}
/*Cell* saved_node1 = new Cell(*root);
Cell* saved_node2 = new Cell(*that.root);*/
BST a, b, c, d;
a.root = root->left;
b.root = that.root->left;
c.root = root->right;
d.root = that.root->right;
if(a.isEqualTo(b) && c.isEqualTo(d)){
/*a.root = saved_node1;
b.root = saved_node2;
c.root = saved_node1;
d.root = saved_node2;*/
return true;
}
return false;
}
ツリー デストラクタ:
void BST::destroy(void) {
length = 0;
delete root;
root = nullptr;
}