Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C++] Probabile errore di allocazione della memoria

    Salve a tutti stavo realizzando una classe e come dato membro utilizzo un vettore di puntatori a oggetti; nel costruttore pongo i vari puntatori a 0 (o NULL) ed ecco qua che sorge l'errore: compila ed esegue ma poi "Il programma ha smesso di funzionare".
    In un altro invece certe volte viene eseguito e certe volte termina la sua esecuzione (se non riesco a risolvere il problema posterò il codice). Ritornando al discorso iniziale vi posto il codice:
    codice:
    //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<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];
          }
    }
    Il seguente codice invece non crea problemi:
    codice:
    //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;
    }
    dove iscritti è un array di puntatori a Utente.
    Ringrazio in anticipo.
    --

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Probabilmente l'errore è causato da altro nel tuo codice. Bisognerebbe vederlo tutto, compilarlo ed eseguirlo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    appena possibile vedrò di postare tutti i codici..il programma è stato anche riassemblato più volte.
    --

  4. #4
    Posto i codici delle varie classi e dei file .cpp:
    codice:
    //Rete.h
    #ifndef RETE_H
    #define RETE_H
    #include "Utente.h"
    #include "Gruppo.h"
    
    class Rete{
          
          public:
                 Rete();
                 ~Rete();
          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<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];
          }
    }
    
    
    //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();
                 
          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];
    }
    
    
    //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;
    }
    
    
    //main.cpp
    #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;
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    E quando hai problemi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    appena eseguo il programma. viene compilato, ma appena lo eseguo appare la console e subito va in crash.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    A me, no.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    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à

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.