Newsgroup: it.comp.lang.c++
Titolo: [110 righe] Comportamento strano

Salve a tutti.
Ci sto perdendo la testa da mezza giornata (si', di ferragosto)
sapreste aiutarmi?
Ho una classe albero definita come segue:
template <class tipoelem>
class Albero {
  struct appoggio {
    struct nodo *padre, *figlio;
    struct appoggio *maggiore, *minore;
  };
  struct nodo {
    tipoelem a;
    appoggio *up, *down;
  };
  public:
    [vari metodi funzionanti]
    bool insPrimoSottoAlbero (posizione p, Albero t) {
      if (p!=NULL) {
        if (!t.alberoVuoto())
          return copiaAlbero ((nodo*)p, t, t.radiceAlbero(), true);
        return true;
      }
      cerr<<"insPrimoSottoAlbero) Errore! Posizione non ammessa!"<<endl;
      return false;
    };
    bool insSottoAlbero (posizione p, Albero t) {
      if (p!=NULL) {
        if (!t.alberoVuoto()) {
          if ((nodo*)p!=radice)
            return copiaAlbero ((nodo*)p, t, t.radiceAlbero(), false);
            cerr<<"insSottoAlbero) Errore! La radice NON puo' avere
fratelli!"<<endl;
          return false;
        }
        return true;
      }
      cerr<<"insSottoAlbero) Errore! Posizione non ammessa!"<<endl;
      return false;
    };
  private:
    bool copiaAlbero (nodo* p, Albero t, posizione q, bool primo) {
      if (p!=NULL) {
        nodo* n=new nodo;
        appoggio* a=new appoggio;
        if (n!=NULL && a!=NULL) {
          //inizio visita
          n->a=t.leggiNodo(q);
          n->up=a;
          n->down=NULL;
          a->figlio=n;
          if (primo) {                 //aggiungo n come primo figlio di p
            a->maggiore=NULL;
            a->padre=p;
            a->minore=p->down;
            p->down=a;
          }
          else {                //aggiungo n come fratello successivo di p
            a->maggiore=p->up;
            a->padre=p->up->padre;
            a->minore=p->up->minore;
            p->up->minore=a;
          }
          if (a->minore!=NULL)
            a->minore->maggiore=a;
          //fine visita
          if (!t.foglia(q)) {                           //se non e' foglia
            //prima copia il primo figlio
            if (!copiaAlbero(p->down->figlio, t, t.primoFiglio(q), true))
              return false;
            //poi gli altri
            p=p->down->figlio;
            q=t.succFratello(t.primoFiglio(q));
            while (q!=NULL) {
              if (!copiaAlbero(p, t, q, false))
                return false;
              p=p->up->minore->figlio;
              q=t.succFratello(q);
            }
          }
          return true;
        }
        cerr<<"copiaAlbero) Errore! Memoria insufficiente!"<<endl;
      }
      cerr<<"copiaAlbero) Errore! Posizione non ammessa!"<<endl;
      return false;
    };
    nodo* radice;
};
ma se nel main faccio una cosa come:
int main() {
  Albero <int> t, u , v;
  t.insRadice(10);
  u.insRadice(20);
  t.insPrimoSottoAlbero(t.radiceAlbero(), u);
  t.insSottoAlbero(t.primoFiglio(t.radiceAlbero()), u);
  cout<<t.leggiNodo(t.radiceAlbero())<<" ";
  cout<<t.leggiNodo(t.primoFiglio(t.radiceAlbero()))<<" ";
  cout<<t.leggiNodo(t.succFratello(t.primoFiglio(t.radiceAlbero())))<<endl;
}
non mi esce "10 20 20", ma un "10 20 134523048"
ora, da dove viene quel valore strano?
-- 
§                      ZeD                       §
§                   15/08/2004                   §
§ Assunzione B.V. Maria-S. Tarcisio-S. Stanislao §
§    Now listening: U2 - Sunday bloody sunday    §

 Ci sto perdendo la testa da mezza giornata (si', di ferragosto)
Ovviamente il problema NON era nel codice che ho postato, ma in uno dei
metodi *funzionanti*
vabe', scusate il disturbo.
-- 
§                                  ZeD                                   §
§                               15/08/2004                               §
§             Assunzione B.V. Maria-S. Tarcisio-S. Stanislao             §
§ Now listening: Pink floyd - Shine on you crazy diamond (parts I - VII) §