我是一名计算机科学专业的学生,我做了一项ADT工作,它将字符串存储在通用树中,这是一个定义的前缀(开始相同的字符串的第一个字母只存储一次)和I&已经对它进行了测试,所以它现在似乎运行良好。然而,现在我需要做一个程序,它使ADT的一些实例具有不同大小的前缀,并且我得到了一些麻烦。
如果我写:
Refranes *ref1 ;
Refranes *ref2 ;
ref1 = new Refranes(3) ;
ref2 = new Refranes(4) ;
ref1->Insertar("try1") ; // Insert "try1" on the tree
ref2->Insertar("try2") ;
cout << *ref1 << *ref2 ;
一切正常,但如果我尝试:
Refranes *ref ;
ref = new Refranes(3) ;
ref->Insertar("try1") ;
cout <<*ref ;
delete ref ;
ref = new Refranes(4) ;
ref->Insertar("try2") ;
cout << *ref ;
打印&#34; try2&#34;一遍又一遍......我无法找到出错的地方......
我不确定我是否以错误的方式使用指针或者我的ADT是否正确..
我怀疑这会在ADT上失败,因为正如我所示,在不同的指针上制作新的Refranes工作正常,所以我认为问题是当我尝试重用指针并调用删除运算符时......是什么让我感到困惑...如果我删除了与指针关联的内存并调用了新操作符...我早期完成的操作如何修改新实例的行为?
我告诉你一些我需要的代码,以便了解它们的用途 ng:
1:ADT&#34; Refranes&#34;其中包含一个GeneralTree
private:
ArbolGeneral<string> ab;// general tree
int len_prefijo;
int n_ref;// number of string stored
int caracteres_totales; // number of characters stored
它没有析构函数,因为ArbolGeneral会这样做,而其余的属性都是int类型。
ArbolGeneral属性和析构函数: 私人的: struct nodo {//点头三人 Tbase礼仪; //
nodo *izqda; // left child
nodo *drcha; // rigth brother
nodo *padre; // father nod
};
struct nodo *laraiz; // root
void destruir(nodo * n){ // destroy meethod
if ( n != 0 ){
destruir(n->izqda) ;
destruir(n->drcha) ;
delete n ;
}
~ArbolGeneral(){
destruir(laraiz) ;
}
我认为ADT的其余部分正常工作。