Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Errore di segmentazione c++
Forum - C/C++ - Errore di segmentazione c++

Avatar
Transagonistica (Normal User)
Newbie


Messaggi: 3
Iscritto: 31/05/2009

Segnala al moderatore
Postato alle 10:33
Domenica, 31/05/2009
ciao a tutti...sono nuovo nel forum e ho visto che potrebbe fare al caso mio per risolvere il mio problema. il programma che vi posto qui sotto viene compilato bene ma al momento della sua esecuzione crasha per un errore di segmentazione che non riesco a spiegarmi. Qualcuno saprebbe indicarmi la soluzione del problema? Questo è il programma, ringrazio vivamente chiunque mi possa aiutare :)

#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;


class atleta{
      char* nome;
      char* cognome;
      int data_di_nascita;
      public:
             atleta(char* p1, char* p2, int p3) {  nome = new char[strlen(p1) + 1];
                                                   strcpy(nome,p1);
                                                   cognome = new char[strlen(p2) + 1];
                                                   strcpy(cognome,p2);
                                                   data_di_nascita = p3;
                                                   return;
                                                   };
      
             ~atleta(){ delete[] nome;
                        delete[] cognome;
                        
                        return;
                        };
            
             atleta(const atleta& ob){ nome = new char[strlen(ob.nome)+1];
                                       if(!nome) { cout<<"Grave Errore"<<'\n';
                                                   exit(1);
                                                   };
                                       strcpy(nome, ob.nome);
                                      
                                       cognome = new char[strlen(ob.cognome)+1];
                                       if(!cognome) { cout<<"Grave Errore"<<'\n';
                                                      exit(1);
                                                      };
                                       strcpy(cognome,ob.cognome);
                                      
                                       data_di_nascita = ob.data_di_nascita;
                                       return;
                                       }
                                      
             friend ostream& operator<<(ostream& stream, atleta ob0);
             friend istream& operator>>(istream& stream, atleta& ob01);
            
             void putdato(char* p1, char* p2, int p3) {  nome = new char[strlen(p1) + 1];
                                                         strcpy(nome,p1);
                                                         cognome = new char[strlen(p2) + 1];
                                                         strcpy(cognome,p2);
                                                         data_di_nascita = p3;
                                                         return;
                                                         };
             atleta getdato(){ return *this;};
             };

struct stagione{
       int stag;//stagioni giocate;
       char* squad;//squadra di militanza;
       int pres;//presenze;
       int gol;//gol fatti o subiti(nel caso si tratti di un portiere);
      
       };
      
struct carriera{
       stagione ob[25];
      
       carriera(){
                 for(int i=0; i<25; i++){
                 ob.stag = 0;
                                   };
                 };
          
       };      

class calciatore : public atleta {
      int num;//numero di maglia;
      char* ruolo;
      char* squadra;
      carriera ogg;//dato informativo sulla carriera del giocatore;
      public:
             calciatore(char* p1, char* p2, int p3, int a, char* p4, char* p5, carriera k) : atleta(p1,p2,p3) { num = a;
                                                                                                                 ruolo = new char[strlen(p4)+1];
                                                                                                                 if(!ruolo) { cout<<"Grave Errore"<<'\n';
                                                                                                                              exit(1);
                                                                                                                              };
                                                                                                                 strcpy(ruolo,p4);
                                                                                                                
                                                                                                                 squadra = new char[strlen(p5)+1];
                                                                                                                 if(!squadra) { cout<<"Grave Errore"<<'\n';
                                                                                                                                exit(1);
                                                                                                                                };
                                                                                                                 strcpy(squadra,p5);
                                                                                                                                
                                                                                                                 for(int i=0; i<25; i++){
                                                                                                                         ogg.ob.gol = k.ob.gol;
                                                                                                                         ogg.ob.pres =k.ob.pres;
                                                                                                                         ogg.ob.squad = new char[strlen(k.ob.squad)+1];
                                                                                                                         strcpy(ogg.ob.squad, k.ob.squad);
                                                                                                                         ogg.ob.stag= k.ob.stag;
                                                                                                                         };
                                                                                                                 return;
                                                                                                                 };
         ~calciatore(){ delete[] ruolo;
                        delete[] squadra;
                        };
                        
         calciatore(const atleta& ob, const calciatore& ob2) : atleta(ob){ num = ob2.num;
                                           ruolo = new char[strlen(ob2.ruolo)+1];
                                           strcpy(ruolo,ob2.ruolo);
                                           squadra = new char[strlen(ob2.squadra)+1];
                                           strcpy(squadra,ob2.squadra);
                                          
                                           for(int i=0; i<25; i++){
                                           ogg.ob.gol = ob2.ogg.ob.gol;
                                           ogg.ob.pres =ob2.ogg.ob.pres;
                                           ogg.ob.squad = new char[strlen(ob2.ogg.ob.squad)+1];
                                           strcpy(ogg.ob.squad, ob2.ogg.ob.squad);
                                           ogg.ob.stag= ob2.ogg.ob.stag;
                                           };
                                           return;
                                           };

        int calcola_gol(){ int a;
                           a=0;
                          
                           for(int i=0; i<25; i++){
                                   a = a + ogg.ob.gol;
                                   };
                           return a;
                           };
        friend ostream& operator<<(ostream& stream, calciatore ob3);
        friend istream& operator>>(istream& stream, calciatore& ob3);
        friend istream& operator>>(istream& stream, carriera& p5);
        calciatore& operator+(stagione& p8){
                                            int i = 0;
                                            while(ogg.ob.stag!=0){
                                            i++;
                                            };
                                            
                                            if(i>=24){
                                                      cout<<"Carriera Piena, impossibile effettuare aggiunta nuova stagione";
                                                      exit(1);
                                                      };
                                            
                                            ogg.ob.stag = p8.stag;
                                            ogg.ob.pres = p8.pres;
                                            ogg.ob.gol = p8.gol;
                                            ogg.ob.squad = new char[strlen(p8.squad)+1];
                                            strcpy(ogg.ob.squad, p8.squad);
                                            
                                            return *this;
                                            };
                                            
        
        void putdato(char* p1, char* p2, int p3, int a, char* p4, char* p5, carriera k){
                                                                                          atleta(p1,p2,p3);
                                                                                          num = a;
                                                                                          ruolo = new char[strlen(p4)+1];
                                                                                          if(!ruolo) { cout<<"Grave Errore"<<'\n';
                                                                                                       exit(1);
                                                                                                       };
                                                                                          strcpy(ruolo,p4);
                                                                                                                
                                                                                          squadra = new char[strlen(p5)+1];
                                                                                          if(!squadra) { cout<<"Grave Errore"<<'\n';
                                                                                                         exit(1);
                                                                                                         };
                                                                                          strcpy(squadra, p5);
                                                                                                                                
                                                                                          for(int i=0; i<25; i++){
                                                                                                                     ogg.ob.gol = k.ob.gol;
                                                                                                                     ogg.ob.pres =k.ob.pres;
                                                                                                                     ogg.ob.squad = new char[strlen(k.ob.squad)+1];    
                                                                                                                     strcpy(ogg.ob.squad, k.ob.squad);
                                                                                                                     ogg.ob.stag= k.ob.stag;                                                                                                                
                                                                                                                     };
                                                                                          return;
                                                                                          };
        
        
        };

ostream& operator<<(ostream& stream, atleta ob0)
{
         stream<<"NOME: "<<ob0.nome<<'\n';
         stream<<"COGNOME: "<<ob0.cognome<<'\n';
         stream<<"DATA DI NASCITA: "<<ob0.data_di_nascita<<'\n';
        
         return stream;
};

istream& operator>>(istream& stream, atleta& ob01)
{
         stream>>ob01.nome;
         stream>>ob01.cognome;
         stream>>ob01.data_di_nascita;
        
         return stream;
};

ostream& operator<<(ostream& stream, carriera p5)
{
         stream<<"CARRIERA"<<'\n';
        
         for(int i=0; i<25; i++){
         stream<<"Stagione: "<<p5.ob.stag<<'\n';
         stream<<"Squadra: "<<p5.ob.squad<<'\n';
         stream<<"Presenze: "<<p5.ob.pres<<'\n';
         stream<<"Gol fatti/subiti: "<<p5.ob.gol<<'\n';
         };
         return stream;
};

ostream& operator<<(ostream& stream, calciatore ob3)
{
         atleta* temp;
         temp = &ob3;
        
         stream<<(*temp)<<'\n';
         stream<<"RUOLO: "<<ob3.ruolo<<'\n';
         stream<<"SQUADRA: "<<ob3.squadra<<'\n';
         stream<<ob3.ogg;
        
         return stream;
};
        
istream& operator>>(istream& stream, carriera& p5)
{
     for(int i=0; i<25; i++){
     stream>>p5.ob.stag;
     stream>>p5.ob.squad;
     stream>>p5.ob.pres;
     stream>>p5.ob.gol;
     };
    
     return stream;
};

istream& operator>>(istream& stream, calciatore& ob3)
{
         atleta* temp;
         temp = &ob3;
        
         stream>>(*temp);
         stream>>ob3.ruolo;
         stream>>ob3.squadra;
         stream>>ob3.ogg;
        
         return stream;
};



int main(){
    int k;
    atleta jordan("Michael","Jordan",17021963);
    atleta bryant("Kobe","Bryant", 23081978);
    cout<<jordan;
    cout<<bryant;
    
    atleta phelps("Michael","Phelps", 30061985);
    
    cout<< phelps;
    
    stagione duemilaottomald;
    stagione duemilasettemald;
    stagione duemilaseimald;
    
    duemilaottomald.stag = 2008;
    duemilaottomald.squad = "Milan";
    duemilaottomald.pres = 36;
    duemilaottomald.gol = 1;
    
    duemilasettemald.stag = 2007;
    duemilasettemald.squad = "Milan";
    duemilasettemald.pres = 35;
    duemilasettemald.gol = 0;
    
    duemilaseimald.stag = 2006;
    duemilaseimald.squad = "Milan";
    duemilaseimald.pres = 28;
    duemilaseimald.gol = 1;
    
    carriera mald;
    
    mald.ob[0] = duemilaseimald;
    mald.ob[1] = duemilasettemald;
    mald.ob[2] = duemilaottomald;
    
    
    
    calciatore Maldini("Paolo", "Maldini", 26061968, 3, "difensore", "Milan",mald);
    cout<<Maldini;
    
    k=Maldini.calcola_gol();
    
    cout<<"In carriera Maldini ha segnato"<<k<<"gol"<<'\n';
    
    carriera cass;
    
    stagione duemilaottocass;
    
    duemilaottocass.stag = 2008;
    duemilaottocass.squad = "Sampdoria";
    duemilaottocass.gol= 11;
    duemilaottocass.pres= 30;
    
    cass.ob[0] = duemilaottocass;
    
    calciatore Cassano("Antonio", "Cassano", 12071982, 10, "fantasista", "Sampdoria", cass);
    cout<<Cassano;
    
    stagione duemilasettecass;
    
    duemilasettecass.stag = 2007;
    duemilasettecass.gol = 5;
    duemilasettecass.squad = "Real Madrid";
    duemilasettecass.pres= 9;
    
    Cassano = Cassano + duemilasettecass;
    
    cout<<Cassano;
    
    cin>>k;
};

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 10:50
Domenica, 31/05/2009
Se vuoi avere una risposta, inserisci il codice tra i tag

[ code ]

e

[ /code ]

(senza gli spazi tra parentesi quadre) altrimenti questo viene modificato e non si capisce nulla.

PM Quote
Avatar
Transagonistica (Normal User)
Newbie


Messaggi: 3
Iscritto: 31/05/2009

Segnala al moderatore
Postato alle 10:55
Domenica, 31/05/2009
ecco qua, scusate tutti quanti :)

Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdlib>
  4. using namespace std;
  5.  
  6.  
  7. class atleta{
  8.       char* nome;
  9.       char* cognome;
  10.       int data_di_nascita;
  11.       public:
  12.              atleta(char* p1, char* p2, int p3) {  nome = new char[strlen(p1) + 1];
  13.                                                    strcpy(nome,p1);
  14.                                                    cognome = new char[strlen(p2) + 1];
  15.                                                    strcpy(cognome,p2);
  16.                                                    data_di_nascita = p3;
  17.                                                    return;
  18.                                                    };
  19.      
  20.              ~atleta(){ delete[] nome;
  21.                         delete[] cognome;
  22.                        
  23.                         return;
  24.                         };
  25.              
  26.              atleta(const atleta& ob){ nome = new char[strlen(ob.nome)+1];
  27.                                        if(!nome) { cout<<"Grave Errore"<<'\n';
  28.                                                    exit(1);
  29.                                                    };
  30.                                        strcpy(nome, ob.nome);
  31.                                        
  32.                                        cognome = new char[strlen(ob.cognome)+1];
  33.                                        if(!cognome) { cout<<"Grave Errore"<<'\n';
  34.                                                       exit(1);
  35.                                                       };
  36.                                        strcpy(cognome,ob.cognome);
  37.                                        
  38.                                        data_di_nascita = ob.data_di_nascita;
  39.                                        return;
  40.                                        }
  41.                                        
  42.              friend ostream& operator<<(ostream& stream, atleta ob0);
  43.              friend istream& operator>>(istream& stream, atleta& ob01);
  44.              
  45.              void putdato(char* p1, char* p2, int p3) {  nome = new char[strlen(p1) + 1];
  46.                                                          strcpy(nome,p1);
  47.                                                          cognome = new char[strlen(p2) + 1];
  48.                                                          strcpy(cognome,p2);
  49.                                                          data_di_nascita = p3;
  50.                                                          return;
  51.                                                          };
  52.              atleta getdato(){ return *this;};
  53.              };
  54.  
  55. struct stagione{
  56.        int stag;//stagioni giocate;
  57.        char* squad;//squadra di militanza;
  58.        int pres;//presenze;
  59.        int gol;//gol fatti o subiti(nel caso si tratti di un portiere);
  60.        
  61.        };
  62.        
  63. struct carriera{
  64.        stagione ob[25];
  65.        
  66.        carriera(){
  67.                  for(int i=0; i<25; i++){
  68.                  ob[i].stag = 0;
  69.                                    };
  70.                  };
  71.            
  72.        };      
  73.  
  74. class calciatore : public atleta {
  75.       int num;//numero di maglia;
  76.       char* ruolo;
  77.       char* squadra;
  78.       carriera ogg;//dato informativo sulla carriera del giocatore;
  79.       public:
  80.              calciatore(char* p1, char* p2, int p3, int a, char* p4, char* p5, carriera k) : atleta(p1,p2,p3) { num = a;
  81.                                                                                                                  ruolo = new char[strlen(p4)+1];
  82.                                                                                                                  if(!ruolo) { cout<<"Grave Errore"<<'\n';
  83.                                                                                                                               exit(1);
  84.                                                                                                                               };
  85.                                                                                                                  strcpy(ruolo,p4);
  86.                                                                                                                  
  87.                                                                                                                  squadra = new char[strlen(p5)+1];
  88.                                                                                                                  if(!squadra) { cout<<"Grave Errore"<<'\n';
  89.                                                                                                                                 exit(1);
  90.                                                                                                                                 };
  91.                                                                                                                  strcpy(squadra,p5);
  92.                                                                                                                                
  93.                                                                                                                  for(int i=0; i<25; i++){
  94.                                                                                                                          ogg.ob[i].gol = k.ob[i].gol;
  95.                                                                                                                          ogg.ob[i].pres =k.ob[i].pres;
  96.                                                                                                                          ogg.ob[i].squad = new char[strlen(k.ob[i].squad)+1];
  97.                                                                                                                          strcpy(ogg.ob[i].squad, k.ob[i].squad);
  98.                                                                                                                          ogg.ob[i].stag= k.ob[i].stag;
  99.                                                                                                                          };
  100.                                                                                                                  return;
  101.                                                                                                                  };
  102.          ~calciatore(){ delete[] ruolo;
  103.                         delete[] squadra;
  104.                         };
  105.                        
  106.          calciatore(const atleta& ob, const calciatore& ob2) : atleta(ob){ num = ob2.num;
  107.                                            ruolo = new char[strlen(ob2.ruolo)+1];
  108.                                            strcpy(ruolo,ob2.ruolo);
  109.                                            squadra = new char[strlen(ob2.squadra)+1];
  110.                                            strcpy(squadra,ob2.squadra);
  111.                                            
  112.                                            for(int i=0; i<25; i++){
  113.                                            ogg.ob[i].gol = ob2.ogg.ob[i].gol;
  114.                                            ogg.ob[i].pres =ob2.ogg.ob[i].pres;
  115.                                            ogg.ob[i].squad = new char[strlen(ob2.ogg.ob[i].squad)+1];
  116.                                            strcpy(ogg.ob[i].squad, ob2.ogg.ob[i].squad);
  117.                                            ogg.ob[i].stag= ob2.ogg.ob[i].stag;
  118.                                            };
  119.                                            return;
  120.                                            };
  121.  
  122.         int calcola_gol(){ int a;
  123.                            a=0;
  124.                            
  125.                            for(int i=0; i<25; i++){
  126.                                    a = a + ogg.ob[i].gol;
  127.                                    };
  128.                            return a;
  129.                            };
  130.         friend ostream& operator<<(ostream& stream, calciatore ob3);
  131.         friend istream& operator>>(istream& stream, calciatore& ob3);
  132.         friend istream& operator>>(istream& stream, carriera& p5);
  133.         calciatore& operator+(stagione& p8){
  134.                                             int i = 0;
  135.                                             while(ogg.ob[i].stag!=0){
  136.                                             i++;
  137.                                             };
  138.                                            
  139.                                             if(i>=24){
  140.                                                       cout<<"Carriera Piena, impossibile effettuare aggiunta nuova stagione";
  141.                                                       exit(1);
  142.                                                       };
  143.                                            
  144.                                             ogg.ob[i].stag = p8.stag;
  145.                                             ogg.ob[i].pres = p8.pres;
  146.                                             ogg.ob[i].gol = p8.gol;
  147.                                             ogg.ob[i].squad = new char[strlen(p8.squad)+1];
  148.                                             strcpy(ogg.ob[i].squad, p8.squad);
  149.                                            
  150.                                             return *this;
  151.                                             };
  152.                                              
  153.        
  154.         void putdato(char* p1, char* p2, int p3, int a, char* p4, char* p5, carriera k){
  155.                                                                                           atleta(p1,p2,p3);
  156.                                                                                           num = a;
  157.                                                                                           ruolo = new char[strlen(p4)+1];
  158.                                                                                           if(!ruolo) { cout<<"Grave Errore"<<'\n';
  159.                                                                                                        exit(1);
  160.                                                                                                        };
  161.                                                                                           strcpy(ruolo,p4);
  162.                                                                                                                  
  163.                                                                                           squadra = new char[strlen(p5)+1];
  164.                                                                                           if(!squadra) { cout<<"Grave Errore"<<'\n';
  165.                                                                                                          exit(1);
  166.                                                                                                          };
  167.                                                                                           strcpy(squadra, p5);
  168.                                                                                                                                
  169.                                                                                           for(int i=0; i<25; i++){
  170.                                                                                                                      ogg.ob[i].gol = k.ob[i].gol;
  171.                                                                                                                      ogg.ob[i].pres =k.ob[i].pres;
  172.                                                                                                                      ogg.ob[i].squad = new char[strlen(k.ob[i].squad)+1];    
  173.                                                                                                                      strcpy(ogg.ob[i].squad, k.ob[i].squad);
  174.                                                                                                                      ogg.ob[i].stag= k.ob[i].stag;                                                                                                                
  175.                                                                                                                      };
  176.                                                                                           return;
  177.                                                                                           };
  178.        
  179.        
  180.         };
  181.  
  182. ostream& operator<<(ostream& stream, atleta ob0)
  183. {
  184.          stream<<"NOME: "<<ob0.nome<<'\n';
  185.          stream<<"COGNOME: "<<ob0.cognome<<'\n';
  186.          stream<<"DATA DI NASCITA: "<<ob0.data_di_nascita<<'\n';
  187.          
  188.          return stream;
  189. };
  190.  
  191. istream& operator>>(istream& stream, atleta& ob01)
  192. {
  193.          stream>>ob01.nome;
  194.          stream>>ob01.cognome;
  195.          stream>>ob01.data_di_nascita;
  196.          
  197.          return stream;
  198. };
  199.  
  200. ostream& operator<<(ostream& stream, carriera p5)
  201. {
  202.          stream<<"CARRIERA"<<'\n';
  203.          
  204.          for(int i=0; i<25; i++){
  205.          stream<<"Stagione: "<<p5.ob[i].stag<<'\n';
  206.          stream<<"Squadra: "<<p5.ob[i].squad<<'\n';
  207.          stream<<"Presenze: "<<p5.ob[i].pres<<'\n';
  208.          stream<<"Gol fatti/subiti: "<<p5.ob[i].gol<<'\n';
  209.          };
  210.          return stream;
  211. };
  212.  
  213. ostream& operator<<(ostream& stream, calciatore ob3)
  214. {
  215.          atleta* temp;
  216.          temp = &ob3;
  217.          
  218.          stream<<(*temp)<<'\n';
  219.          stream<<"RUOLO: "<<ob3.ruolo<<'\n';
  220.          stream<<"SQUADRA: "<<ob3.squadra<<'\n';
  221.          stream<<ob3.ogg;
  222.          
  223.          return stream;
  224. };
  225.          
  226. istream& operator>>(istream& stream, carriera& p5)
  227. {
  228.      for(int i=0; i<25; i++){
  229.      stream>>p5.ob[i].stag;
  230.      stream>>p5.ob[i].squad;
  231.      stream>>p5.ob[i].pres;
  232.      stream>>p5.ob[i].gol;
  233.      };
  234.      
  235.      return stream;
  236. };
  237.  
  238. istream& operator>>(istream& stream, calciatore& ob3)
  239. {
  240.          atleta* temp;
  241.          temp = &ob3;
  242.          
  243.          stream>>(*temp);
  244.          stream>>ob3.ruolo;
  245.          stream>>ob3.squadra;
  246.          stream>>ob3.ogg;
  247.          
  248.          return stream;
  249. };
  250.  
  251.  
  252.  
  253. int main(){
  254.     int k;
  255.     atleta jordan("Michael","Jordan",17021963);
  256.     atleta bryant("Kobe","Bryant", 23081978);
  257.     cout<<jordan;
  258.     cout<<bryant;
  259.    
  260.     atleta phelps("Michael","Phelps", 30061985);
  261.    
  262.     cout<< phelps;
  263.    
  264.     stagione duemilaottomald;
  265.     stagione duemilasettemald;
  266.     stagione duemilaseimald;
  267.    
  268.     duemilaottomald.stag = 2008;
  269.     duemilaottomald.squad = "Milan";
  270.     duemilaottomald.pres = 36;
  271.     duemilaottomald.gol = 1;
  272.    
  273.     duemilasettemald.stag = 2007;
  274.     duemilasettemald.squad = "Milan";
  275.     duemilasettemald.pres = 35;
  276.     duemilasettemald.gol = 0;
  277.    
  278.     duemilaseimald.stag = 2006;
  279.     duemilaseimald.squad = "Milan";
  280.     duemilaseimald.pres = 28;
  281.     duemilaseimald.gol = 1;
  282.    
  283.     carriera mald;
  284.    
  285.     mald.ob[0] = duemilaseimald;
  286.     mald.ob[1] = duemilasettemald;
  287.     mald.ob[2] = duemilaottomald;
  288.    
  289.      
  290.    
  291.     calciatore Maldini("Paolo", "Maldini", 26061968, 3, "difensore", "Milan",mald);
  292.     cout<<Maldini;
  293.    
  294.     k=Maldini.calcola_gol();
  295.    
  296.     cout<<"In carriera Maldini ha segnato"<<k<<"gol"<<'\n';
  297.    
  298.     carriera cass;
  299.    
  300.     stagione duemilaottocass;
  301.    
  302.     duemilaottocass.stag = 2008;
  303.     duemilaottocass.squad = "Sampdoria";
  304.     duemilaottocass.gol= 11;
  305.     duemilaottocass.pres= 30;
  306.    
  307.     cass.ob[0] = duemilaottocass;
  308.    
  309.     calciatore Cassano("Antonio", "Cassano", 12071982, 10, "fantasista", "Sampdoria", cass);
  310.     cout<<Cassano;
  311.    
  312.     stagione duemilasettecass;
  313.    
  314.     duemilasettecass.stag = 2007;
  315.     duemilasettecass.gol = 5;
  316.     duemilasettecass.squad = "Real Madrid";
  317.     duemilasettecass.pres= 9;
  318.    
  319.     Cassano = Cassano + duemilasettecass;
  320.    
  321.     cout<<Cassano;
  322.    
  323.     cin>>k;
  324. };


PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 14:12
Domenica, 31/05/2009
L'errore si manifesta in

    calciatore Maldini("Paolo", "Maldini", 26061968, 3, "difensore", "Milan", mald);

perche', in precedenza, prepari 3 elementi in

    mald.ob[0] = duemilaseimald;
    mald.ob[1] = duemilasettemald;
    mald.ob[2] = duemilaottomald;

ma nel costruttore di calciatore ne tratti COMUNQUE 25 nel ciclo

for(int i=0; i<25; i++){

Ovviamente, per i primi 3 va bene, ma dopo la strlen fallisce.


PM Quote
Avatar
Trans (Normal User)
Newbie


Messaggi: 2
Iscritto: 01/06/2009

Segnala al moderatore
Postato alle 11:45
Lunedì, 01/06/2009
Testo quotato

Postato originariamente da theprogrammer:

L'errore si manifesta in

    calciatore Maldini("Paolo", "Maldini", 26061968, 3, "difensore", "Milan", mald);

perche', in precedenza, prepari 3 elementi in

    mald.ob[0] = duemilaseimald;
    mald.ob[1] = duemilasettemald;
    mald.ob[2] = duemilaottomald;

ma nel costruttore di calciatore ne tratti COMUNQUE 25 nel ciclo

for(int i=0; i<25; i++){

Ovviamente, per i primi 3 va bene, ma dopo la strlen fallisce.




quindi per risolvere il problema cosa potrei fare?

PM Quote
Avatar
Trans (Normal User)
Newbie


Messaggi: 2
Iscritto: 01/06/2009

Segnala al moderatore
Postato alle 12:12
Lunedì, 01/06/2009
Questa è la versione definitiva del mio programma...

Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdlib>
  4. #include<fstream>
  5. using namespace std;
  6.  
  7.  
  8.  
  9. class atleta{
  10.       char* nome;
  11.       char* cognome;
  12.       int data_di_nascita;
  13.       public:
  14.              atleta(char* p1, char* p2, int p3) {  nome = new char[strlen(p1) + 1];
  15.                                                    strcpy(nome,p1);
  16.                                                    cognome = new char[strlen(p2) + 1];
  17.                                                    strcpy(cognome,p2);
  18.                                                    data_di_nascita = p3;
  19.                                                    return;
  20.                                                    };
  21.      
  22.              ~atleta(){ delete[] nome;
  23.                         delete[] cognome;
  24.                        
  25.                         return;
  26.                         };
  27.              
  28.              atleta(const atleta& ob){ nome = new char[strlen(ob.nome)+1];
  29.                                        if(!nome) { cout<<"Grave Errore"<<'\n';
  30.                                                    exit(1);
  31.                                                    };
  32.                                        strcpy(nome, ob.nome);
  33.                                        
  34.                                        cognome = new char[strlen(ob.cognome)+1];
  35.                                        if(!cognome) { cout<<"Grave Errore"<<'\n';
  36.                                                       exit(1);
  37.                                                       };
  38.                                        strcpy(cognome,ob.cognome);
  39.                                        
  40.                                        data_di_nascita = ob.data_di_nascita;
  41.                                        return;
  42.                                        }
  43.                                        
  44.              friend ostream& operator<<(ostream& stream, atleta ob0);
  45.              friend istream& operator>>(istream& stream, atleta& ob01);
  46.              
  47.              void putdato(char* p1, char* p2, int p3) {  nome = new char[strlen(p1) + 1];
  48.                                                          strcpy(nome,p1);
  49.                                                          cognome = new char[strlen(p2) + 1];
  50.                                                          strcpy(cognome,p2);
  51.                                                          data_di_nascita = p3;
  52.                                                          return;
  53.                                                          };
  54.              atleta getdato(){ return *this;};
  55.              };
  56.  
  57. struct stagione{
  58.        int stag;//stagioni giocate;
  59.        char* squad;//squadra di militanza;
  60.        int pres;//presenze;
  61.        int gol;//gol fatti o subiti(nel caso si tratti di un portiere);
  62.        
  63.        };
  64.        
  65. struct carriera{
  66.        stagione ob[25];
  67.        
  68.        carriera(){
  69.                  for(int i=0; i<25; i++){
  70.                  ob[i].stag = 0;
  71.                  };
  72.                  };
  73.            
  74.        };      
  75.  
  76. class calciatore : public atleta {
  77.       int num;//numero di maglia;
  78.       char* ruolo;
  79.       char* squadra;
  80.       carriera ogg;//dato informativo sulla carriera del giocatore;
  81.       public:
  82.              calciatore(char* p1, char* p2, int p3, int a, char* p4, char* p5, carriera k) : atleta(p1,p2,p3) { num = a;
  83.                                                                                                                  ruolo = new char[strlen(p4)+1];
  84.                                                                                                                  if(!ruolo) { cout<<"Grave Errore"<<'\n';
  85.                                                                                                                               exit(1);
  86.                                                                                                                               };
  87.                                                                                                                  strcpy(ruolo,p4);
  88.                                                                                                                  
  89.                                                                                                                  squadra = new char[strlen(p5)+1];
  90.                                                                                                                  if(!squadra) { cout<<"Grave Errore"<<'\n';
  91.                                                                                                                                 exit(1);
  92.                                                                                                                                 };
  93.                                                                                                                  strcpy(squadra,p5);
  94.                                                                                                                                
  95.                                                                                                                  for(int i=0; i<25; i++){
  96.                                                                                                                          ogg.ob[i].gol = k.ob[0].gol;
  97.                                                                                                                          ogg.ob[i].pres =k.ob[0].pres;
  98.                                                                                                                          ogg.ob[i].squad = new char[strlen(k.ob[0].squad)+1];
  99.                                                                                                                          strcpy(ogg.ob[i].squad, k.ob[0].squad);
  100.                                                                                                                          ogg.ob[i].stag= k.ob[0].stag;
  101.                                                                                                                          };
  102.                                                                                                                  return;
  103.                                                                                                                  };
  104.          ~calciatore(){ delete[] ruolo;
  105.                         delete[] squadra;
  106.                         };
  107.                        
  108.          calciatore(const atleta& ob, const calciatore& ob2) : atleta(ob){ num = ob2.num;
  109.                                            ruolo = new char[strlen(ob2.ruolo)+1];
  110.                                            strcpy(ruolo,ob2.ruolo);
  111.                                            squadra = new char[strlen(ob2.squadra)+1];
  112.                                            strcpy(squadra,ob2.squadra);
  113.                                            
  114.                                            for(int i=0; i<25; i++){
  115.                                            ogg.ob[i].gol = ob2.ogg.ob[i].gol;
  116.                                            ogg.ob[i].pres =ob2.ogg.ob[i].pres;
  117.                                            ogg.ob[i].squad = new char[strlen(ob2.ogg.ob[i].squad)+1];
  118.                                            if(!ogg.ob[i].squad){ cout<<"Grave Errore";
  119.                                                                  return ;
  120.                                                                  };
  121.                                            strcpy(ogg.ob[i].squad, ob2.ogg.ob[i].squad);
  122.                                            ogg.ob[i].stag= ob2.ogg.ob[i].stag;
  123.                                            };
  124.                                            return;
  125.                                            };
  126.  
  127.         int calcola_gol(){ int a;
  128.                            a=0;
  129.                            
  130.                            for(int i=0; i<25; i++){
  131.                                    a = a + ogg.ob[i].gol;
  132.                                    };
  133.                            return a;
  134.                            };
  135.         friend ostream& operator<<(ostream& stream, calciatore ob3);
  136.         friend istream& operator>>(istream& stream, calciatore& ob3);
  137.         friend istream& operator>>(istream& stream, carriera& p5);
  138.         calciatore& operator+(stagione& p8){
  139.                                             int i = 0;
  140.                                             while(ogg.ob[i].stag!=0){
  141.                                             i++;
  142.                                             };
  143.                                            
  144.                                             if(i>=24){
  145.                                                       cout<<"Carriera Piena, impossibile effettuare aggiunta nuova stagione";
  146.                                                       exit(1);
  147.                                                       };
  148.                                            
  149.                                             ogg.ob[i].stag = p8.stag;
  150.                                             ogg.ob[i].pres = p8.pres;
  151.                                             ogg.ob[i].gol = p8.gol;
  152.                                             ogg.ob[i].squad = new char[strlen(p8.squad)+1];
  153.                                             strcpy(ogg.ob[i].squad, p8.squad);
  154.                                            
  155.                                             return *this;
  156.                                             };
  157.                                              
  158.        
  159.         void putdato(char* p1, char* p2, int p3, int a, char* p4, char* p5, carriera k){
  160.                                                                                           atleta(p1,p2,p3);
  161.                                                                                           num = a;
  162.                                                                                           ruolo = new char[strlen(p4)+1];
  163.                                                                                           if(!ruolo) { cout<<"Grave Errore"<<'\n';
  164.                                                                                                        exit(1);
  165.                                                                                                        };
  166.                                                                                           strcpy(ruolo,p4);
  167.                                                                                                                  
  168.                                                                                           squadra = new char[strlen(p5)+1];
  169.                                                                                           if(!squadra) { cout<<"Grave Errore"<<'\n';
  170.                                                                                                          exit(1);
  171.                                                                                                          };
  172.                                                                                           strcpy(squadra, p5);
  173.                                                                                                                                
  174.                                                                                           for(int i=0; i<25; i++){
  175.                                                                                                                      ogg.ob[i].gol = k.ob[i].gol;
  176.                                                                                                                      ogg.ob[i].pres =k.ob[i].pres;
  177.                                                                                                                      ogg.ob[i].squad = new char[strlen(k.ob[i].squad)+1];    
  178.                                                                                                                      strcpy(ogg.ob[i].squad, k.ob[i].squad);
  179.                                                                                                                      ogg.ob[i].stag= k.ob[i].stag;                                                                                                                
  180.                                                                                                                      };
  181.                                                                                           return;
  182.                                                                                           };
  183.        
  184.        
  185.         };
  186.  
  187. ostream& operator<<(ostream& stream, atleta ob0)
  188. {
  189.          stream<<"NOME: "<<ob0.nome<<'\n';
  190.          stream<<"COGNOME: "<<ob0.cognome<<'\n';
  191.          stream<<"DATA DI NASCITA: "<<ob0.data_di_nascita<<'\n';
  192.          
  193.          return stream;
  194. };
  195.  
  196. istream& operator>>(istream& stream, atleta& ob01)
  197. {
  198.          stream>>ob01.nome;
  199.          stream>>ob01.cognome;
  200.          stream>>ob01.data_di_nascita;
  201.          
  202.          return stream;
  203. };
  204.  
  205. ostream& operator<<(ostream& stream, carriera p5)
  206. {
  207.          stream<<"CARRIERA"<<'\n';
  208.          
  209.          for(int i=0; i<3;){
  210.          stream<<"Stagione: "<<p5.ob[i].stag<<'\n';
  211.          stream<<"Squadra: "<<p5.ob[i].squad<<'\n';
  212.          stream<<"Presenze: "<<p5.ob[i].pres<<'\n';
  213.          stream<<"Gol fatti/subiti: "<<p5.ob[i].gol<<'\n';
  214.          i++;
  215.          };
  216.          return stream;
  217. };
  218.  
  219. ostream& operator<<(ostream& stream, calciatore ob3)
  220. {
  221.          atleta* temp;
  222.          temp = &ob3;
  223.          
  224.          stream<<(*temp)<<'\n';
  225.          stream<<"RUOLO: "<<ob3.ruolo<<'\n';
  226.          stream<<"SQUADRA: "<<ob3.squadra<<'\n';
  227.          stream<<ob3.ogg;
  228.          
  229.          return stream;
  230. };
  231.          
  232. istream& operator>>(istream& stream, carriera& p5)
  233. {
  234.      for(int i=0; i<25; i++){
  235.      stream>>p5.ob[i].stag;
  236.      stream>>p5.ob[i].squad;
  237.      stream>>p5.ob[i].pres;
  238.      stream>>p5.ob[i].gol;
  239.      };
  240.      
  241.      return stream;
  242. };
  243.  
  244. istream& operator>>(istream& stream, calciatore& ob3)
  245. {
  246.          atleta* temp;
  247.          temp = &ob3;
  248.          
  249.          stream>>(*temp);
  250.          stream>>ob3.ruolo;
  251.          stream>>ob3.squadra;
  252.          stream>>ob3.ogg;
  253.          
  254.          return stream;
  255. };
  256.  
  257.  
  258.  
  259. int main(){
  260.     int k;
  261.    
  262.     ofstream out("Registro");
  263.    
  264.     atleta jordan("Michael","Jordan",17021963);
  265.     atleta bryant("Kobe","Bryant", 23081978);
  266.     cout<<jordan;
  267.     cout<<bryant;
  268.    
  269.     out<<jordan;
  270.     out<<bryant;
  271.    
  272.     atleta phelps("Michael","Phelps", 30061985);
  273.    
  274.     cout<< phelps;
  275.     out<<phelps;
  276.    
  277.     stagione duemilaottomald;
  278.     stagione duemilasettemald;
  279.     stagione duemilaseimald;
  280.    
  281.     duemilaottomald.stag = 2008;
  282.     duemilaottomald.squad = "Milan";
  283.     duemilaottomald.pres = 36;
  284.     duemilaottomald.gol = 1;
  285.    
  286.     duemilasettemald.stag = 2007;
  287.     duemilasettemald.squad = "Milan";
  288.     duemilasettemald.pres = 35;
  289.     duemilasettemald.gol = 0;
  290.    
  291.     duemilaseimald.stag = 2006;
  292.     duemilaseimald.squad = "Milan";
  293.     duemilaseimald.pres = 28;
  294.     duemilaseimald.gol = 1;
  295.    
  296.     carriera mald;
  297.    
  298.     mald.ob[0] = duemilaseimald;
  299.     mald.ob[1] = duemilasettemald;
  300.     mald.ob[2] = duemilaottomald;
  301.    
  302.      
  303.    
  304.     calciatore Maldini("Paolo", "Maldini", 26061968, 3, "difensore", "Milan",mald);
  305.    
  306.     cout<<Maldini;
  307.     out<<Maldini;
  308.    
  309.     _sleep(2000);
  310.    
  311.     k=Maldini.calcola_gol();
  312.    
  313.     cout<<"In carriera Maldini ha segnato"<<k<<"gol"<<'\n';
  314.    
  315.     _sleep(2000);
  316.    
  317.     carriera cass;
  318.    
  319.     stagione duemilaottocass;
  320.    
  321.     duemilaottocass.stag = 2008;
  322.     duemilaottocass.squad = "Sampdoria";
  323.     duemilaottocass.gol= 11;
  324.     duemilaottocass.pres= 30;
  325.    
  326.     cass.ob[0] = duemilaottocass;
  327.    
  328.     calciatore Cassano("Antonio", "Cassano", 12071982, 10, "fantasista", "Sampdoria", cass);
  329.    
  330.     cout<<Cassano;
  331.     out<<Cassano;
  332.     _sleep(2000);
  333.    
  334.     stagione duemilasettecass;
  335.    
  336.     duemilasettecass.stag = 2007;
  337.     duemilasettecass.gol = 5;
  338.     duemilasettecass.squad = "Real Madrid";
  339.     duemilasettecass.pres= 9;
  340.    
  341.     Cassano = Cassano + duemilasettecass;
  342.     cout<<Cassano;
  343.    
  344.     _sleep(2000);
  345.    
  346.     carriera tott;
  347.    
  348.     stagione duemilaottotott;
  349.    
  350.     duemilaottotott.stag = 2008;
  351.     duemilaottotott.gol = 12;
  352.     duemilaottotott.pres= 21;
  353.     duemilaottotott.squad = "Roma";
  354.    
  355.     tott.ob[0] = duemilaottotott;
  356.    
  357.     calciatore Totti("Francesco", "Totti", 27091976, 10, "fantasista", "Roma", tott);
  358.    
  359.     cout<<Totti;
  360.     out<<Totti;
  361.    
  362.     carriera ibrah;
  363.    
  364.     stagione duemilaottoibrah;
  365.    
  366.     duemilaottoibrah.stag = 2008;
  367.     duemilaottoibrah.gol = 25;
  368.     duemilaottoibrah.pres = 36;
  369.     duemilaottoibrah.squad = "Inter";
  370.    
  371.     ibrah.ob[0] = duemilaottoibrah;
  372.    
  373.     calciatore Ibrahimovic("Zlatan", "Ibrahimovic", 3101981, 9, "attaccante", "Inter", ibrah);
  374.    
  375.     cout<<Ibrahimovic;
  376.     out<<Ibrahimovic;
  377.    
  378.     carriera lav;
  379.    
  380.     stagione duemilaottolav;
  381.    
  382.     duemilaottolav.stag = 2008;
  383.     duemilaottolav.squad = "Napoli",
  384.     duemilaottolav.gol = 15;
  385.     duemilaottolav.pres = 30;
  386.    
  387.     lav.ob[0] = duemilaottolav;
  388.    
  389.     calciatore Lavezzi("Ezequiel", "Lavezzi", 3051985, 10, "attaccante", "Napoli", lav);
  390.    
  391.     cout<<Lavezzi;
  392.     out<<Lavezzi;
  393.    
  394.     carriera gil;
  395.    
  396.     stagione duemilaottogil;
  397.    
  398.     duemilaottogil.stag = 2008;
  399.     duemilaottogil.squad = "Fiorentina";
  400.     duemilaottogil.gol = 18;
  401.     duemilaottogil.pres = 29;
  402.    
  403.     gil.ob[0] = duemilaottogil;
  404.    
  405.     calciatore Gilardino("Alberto", "Gilardino", 5071982, 9, "attaccante", "Fiorentina", gil);
  406.    
  407.     cout<<Gilardino;
  408.     out<<Gilardino;
  409.    
  410.     carriera masc;
  411.     stagione duemilaottomasc;
  412.    
  413.     duemilaottomasc.stag = 2008;
  414.     duemilaottomasc.squad = "Catania";
  415.     duemilaottomasc.gol= 10;
  416.     duemilaottomasc.pres = 30;
  417.    
  418.     masc.ob[0] = duemilaottomasc;
  419.    
  420.     calciatore Mascara("Giuseppe", "Mascara", 22081979, 10, "attaccante", "Catania", masc);
  421.    
  422.     cout<<Mascara;
  423.     out<<Mascara;
  424.    
  425.     carriera ned;
  426.     stagione duemilaottoned;
  427.    
  428.     duemilaottoned.stag = 2008;
  429.     duemilaottoned.squad = "Juventus";
  430.     duemilaottoned.gol = 5;
  431.     duemilaottoned.pres =31;
  432.    
  433.     ned.ob[0] = duemilaottoned;
  434.    
  435.     calciatore Nedved("Pavel","Nedved", 30081972, 8, "centrocampista", "Juventus", ned);
  436.    
  437.     cout<<Nedved;
  438.     out<<Nedved;
  439.    
  440.     out.close();
  441.    
  442.     carriera barr;
  443.     stagione duemilaottobar;
  444.    
  445.     duemilaottobar.stag = 2008;
  446.     duemilaottobar.squad = "Bari";
  447.     duemilaottobar.gol = 23;
  448.     duemilaottobar.pres = 30;
  449.    
  450.     barr.ob[0] = duemilaottobar;
  451.    
  452.     calciatore Barreto("Paulo Vitor","Barreto", 12071985, 10, "attaccante", "Bari", barr);
  453.    
  454.     cout<<Barreto;
  455.    
  456.     out.open("Registro");
  457.     out<<Barreto;
  458.    
  459.     carriera mil;
  460.     stagione duemilaottomil;
  461.    
  462.     duemilaottomil.stag = 2008;
  463.     duemilaottomil.squad = "Genoa";
  464.     duemilaottomil.gol = 15;
  465.     duemilaottomil.pres = 30;
  466.    
  467.     mil.ob[0] = duemilaottomil;
  468.    
  469.     calciatore Milito("Diego", "Milito", 12061979, 10, "attaccante", "Genoa", mil);
  470.    
  471.     cout<<Milito;
  472.     out<<Milito;
  473.    
  474.    
  475.    
  476.     carriera mes;
  477.     stagione duemilaottomes;
  478.    
  479.     duemilaottomes.stag = 2008;
  480.     duemilaottomes.squad = "Barcellona";
  481.     duemilaottomes.pres = 25;
  482.     duemilaottomes.gol = 14;
  483.    
  484.     mes.ob[0] = duemilaottomes;
  485.    
  486.     calciatore Messi("Leo", "Messi", 24061987, 10, "attaccante", "Barcellona", mes);
  487.    
  488.     cout<<Messi;
  489.     out<<Messi;
  490.    
  491.     cin>>k;
  492.     out.close();
  493.    
  494.     cin>>k;
  495. };



ho riscontrato i seguenti problemi: quando visualizzo l'oggetto carriera relativo a un giocatore mi visualizza per 3 volte solo il primo elemento, ma non procede con il secondo e il terzo del vettore ob, e onestamente nn riesco a spiegarmelo... successivamente il programma crasha sulla funzione di addizione tra un dato di tipo carriera e uno di tipo calciatore. se potete aiutarmi, perchè sto seriamente uscendo pazzo:cheer:

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 13:51
Lunedì, 01/06/2009
Ma hai risolto il primo problema?

PM Quote
Avatar
Transagonistica (Normal User)
Newbie


Messaggi: 3
Iscritto: 31/05/2009

Segnala al moderatore
Postato alle 14:04
Lunedì, 01/06/2009
Testo quotato

Postato originariamente da theprogrammer:

Ma hai risolto il primo problema?



si, ora l'errore di segmentazione non me lo da più... però in fase di esecuzione il programma presenta ancora quei problemi che ho elencato nel post precedente...

PM Quote