a me già così crashava, comunque ti posto tutti i codici delle classi che fino a 2 minuti fa crashavano e ora non più:
codice:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
#include "Rete.h"

void menu();

int main()
{
    Rete r;
    while(true){
          char c;
          menu();
          cin>>c;
          switch(c){
            case 'a':
                 r.AddUtente();
                 break;
            case 'b':
                 r.AddGruppo();
                 break;
            case 'c':
                 r.IscriviUtenteGruppo();
                 break;
            case 'd':
                 r.ElencoIscrittiGruppo();
                 break;
            case 'e':
                 r.ElencoGruppiUtente();
            default:
                         
                 cout<<"Nessuna scelta inserita"<<endl;
                 break;
          }
    }
    system("PAUSE");
    return 0;
}

void menu()
{
     cout<<"a) aggiungi utente"<<endl;
     cout<<"b) aggiungi gruppo"<<endl;
     cout<<"c) iscrivi utente a gruppo"<<endl;
     cout<<"d) stampa elenco iscritti a gruppo"<<endl;
     cout<<"e) stampa elenco gruppi per l'utente"<<endl;
}


//Gruppo.h
#ifndef GRUPPO_H
#define GRUPPO_H
#include <string>
using std::string;
#include "Utente.h"

class Gruppo
{
      friend ostream& operator<<(ostream& out, const Gruppo& g);
      friend istream& operator>>(istream& in, Gruppo& g);
      
      public:
             Gruppo(string n="", string dc="");
             ~Gruppo();
             void AddUtente();
             void StampaIscritti() const;
             bool CercaUtente(long cd) const;
             
      private:
              string nome, data_creazione;
              Utente* iscritti[100];
};
#endif

//Gruppo.cpp
#include "Gruppo.h"
#include "Utente.h"
#include <string>
using std::string;
#include <iostream>
using std::cout;
using std::endl;
using std::cin;

Gruppo::Gruppo(string n, string dc): nome(n), data_creazione(dc)
{
       for(int i=0; i<100; i++)
            iscritti[i]=0;
}

Gruppo::~Gruppo()
{
       for(int i=0; i<100; i++)
            if(iscritti[i]) delete iscritti[i];
}

void Gruppo::AddUtente()
{
     for(int i=0; i<100; i++)
         if(!iscritti[i]){
                          iscritti[i]=new Utente;
                          cin>>*iscritti[i];
                          return;
         }
     cout<<"Ragginto numero massimo di iscritti"<<endl;
}

void Gruppo::StampaIscritti() const
{
     for(int i=0; i<100; i++)
         if(iscritti[i]) cout<<*iscritti[i];
}

bool Gruppo::CercaUtente(long cd) const
{
     for(int i=0; i<100; i++)
         if(iscritti[i]){
             if(iscritti[i]->GetCodice()==cd) return true;
         }
     return false;
}

ostream& operator<<(ostream& out, const Gruppo& g)
{
         out<<g.nome<<" creato il "<<g.data_creazione<<endl;
         return out;
}

istream& operator>>(istream& in, Gruppo& g)
{
         cout<<"Inserisci il nome del gruppo: ";
         in>>g.nome;
         cout<<"Inserisci la data di creazione: ";
         in>>g.data_creazione;
         return in;
}

//Utente.h
#ifndef UTENTE_H
#define UTENTE_H
#include <string>
using std::string;
#include <iostream>
using std::istream;
using std::ostream;

class Utente
{
      friend ostream& operator<<(ostream& out, const Utente& u);
      friend istream& operator>>(istream& in, Utente& u);
      public:
             Utente(long cod=0, string n="", string c="", string mail="");
             long GetCodice() const;
      private:
              long codice;
              string nome, cognome, email;
      
};
#endif

//Utente.cpp
#include "Utente.h"
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

Utente::Utente(long cod, string n, string c, string mail): codice(cod), nome(n), cognome(c), email(mail) { ; }

long Utente::GetCodice() const { return codice; }


ostream& operator<<(ostream& out, const Utente& u)
{
         cout<<u.codice<<" "<<u.nome<<" "<<u.cognome<<" "<<u.email<<endl;
         return out;
}
istream& operator>>(istream& in, Utente& u)
{
         cout<<"Inserisci codice: ";
         in>>u.codice;
         cout<<"Inserisci nome: ";
         in>>u.nome;
         cout<<"insrisci cognome: ";
         in>>u.cognome;
         cout<<"Inserisci mail: ";
         in>>u.email;
         
         return in;
}

//Rete.h
#ifndef RETE_H
#define RETE_H
#include "Utente.h"
#include "Gruppo.h"

class Rete{
      
      public:
             Rete();
             ~Rete();
             void AddUtente();
             void AddGruppo();
             void IscriviUtenteGruppo();
             void ElencoIscrittiGruppo();
             void ElencoGruppiUtente();
      private:
              Utente* u[500];
              Gruppo* g[500];
              int cercautente(long cd);
};

#endif

//Rete.cpp
#include "Rete.h"
#include "Utente.h"
#include "Gruppo.h"
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

Rete::Rete()
{
 //     for(int i=0; i<100; i++)
   //         u[i]=0;
    for(int i=0; i<500; i++)
                    u[i]=0;
    for(int i=0; i<500; i++)
        g[i]=0;
}
Rete::~Rete()
{
      for(int i=0; i<500; i++){
              if(u[i]) delete u[i];
              if(g[i]) delete g[i];
      }
}
void Rete::AddUtente() 
{
     for(int i=0; i<5000; i++)
         if(!u[i]){
                   u[i]=new Utente;
                   cin>>*u[i];
                   return;
         }
     cout<<"Non e' piu' possibile iscrivere utenti alla rete"<<endl;
}
void Rete::AddGruppo()
{
     for(int i=0; i<500; i++)
         if(!g[i]){
                  g[i]=new Gruppo;
                  cin>>*g[i];
                  return;
         }
     cout<<"Non e' piu' possibile iscrivere gruppi alla rete"<<endl;
     
}
void Rete::IscriviUtenteGruppo() 
{
     long cd;
     cout<<"inserire codice utente: ";
     cin>>cd;
     int indice;
     if((indice=cercautente(cd))>=0) {
         cout<<*u[indice];
         for(int i=0; i<500; i++)
         {
             if(g[i]){
                char risp;
                cout<<*g[i];
                cout<<"vuoi iscriverti?(s/n) ";
                cin>>risp;
                if(risp=='s' || risp=='S')
                    g[i]->AddUtente();
             }
         }
                         
     }
}
void Rete::ElencoIscrittiGruppo()
{
     for(int i=0; i<500; i++)
         if(g[i]){
            cout<<*g[i];
            char risp;
            cout<<"vuoi stampare gli iscritti?(s/n) ";
            cin>>risp;
            if(risp=='s' || risp=='S')
            g[i]->StampaIscritti();
         }
}
void Rete::ElencoGruppiUtente() 
{ 
     long cd;
     cout<<"inserire codice utente: ";
     cin>>cd;
     for(int i=0; i<500; i++){
             if(g[i]){
                if(g[i]->CercaUtente(cd))
                    cout<<*g[i];
             }
     }
     
}

int Rete::cercautente(long cd)
{
     for(int i=0; i<500; i++)
         if(u[i]->GetCodice()==cd) return i;
     cout<<"utente non presente"<<endl;
     return -1;
}
bhu!.
Ciao e grazie per la disponibilità