我的ADT

时间:2017-01-28 10:35:20

标签: c++ tree dynamic-memory-allocation delete-operator

我是一名计算机科学专业的学生,​​我做了一项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类型。

  1. 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) ; 
        }  
    
  2. 我认为ADT的其余部分正常工作。

0 个答案:

没有答案