31/05/09 8:33
Transagonistica
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[i].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[i].gol = k.ob[i].gol;
ogg.ob[i].pres =k.ob[i].pres;
ogg.ob[i].squad = new char[strlen(k.ob[i].squad)+1];
strcpy(ogg.ob[i].squad, k.ob[i].squad);
ogg.ob[i].stag= k.ob[i].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[i].gol = ob2.ogg.ob[i].gol;
ogg.ob[i].pres =ob2.ogg.ob[i].pres;
ogg.ob[i].squad = new char[strlen(ob2.ogg.ob[i].squad)+1];
strcpy(ogg.ob[i].squad, ob2.ogg.ob[i].squad);
ogg.ob[i].stag= ob2.ogg.ob[i].stag;
};
return;
};
int calcola_gol(){ int a;
a=0;
for(int i=0; i<25; i++){
a = a + ogg.ob[i].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[i].stag!=0){
i++;
};
if(i>=24){
cout<<"Carriera Piena, impossibile effettuare aggiunta nuova stagione";
exit(1);
};
ogg.ob[i].stag = p8.stag;
ogg.ob[i].pres = p8.pres;
ogg.ob[i].gol = p8.gol;
ogg.ob[i].squad = new char[strlen(p8.squad)+1];
strcpy(ogg.ob[i].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[i].gol = k.ob[i].gol;
ogg.ob[i].pres =k.ob[i].pres;
ogg.ob[i].squad = new char[strlen(k.ob[i].squad)+1];
strcpy(ogg.ob[i].squad, k.ob[i].squad);
ogg.ob[i].stag= k.ob[i].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[i].stag<<'\n';
stream<<"Squadra: "<<p5.ob[i].squad<<'\n';
stream<<"Presenze: "<<p5.ob[i].pres<<'\n';
stream<<"Gol fatti/subiti: "<<p5.ob[i].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[i].stag;
stream>>p5.ob[i].squad;
stream>>p5.ob[i].pres;
stream>>p5.ob[i].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;
};
#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[i].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[i].gol = k.ob[i].gol;
ogg.ob[i].pres =k.ob[i].pres;
ogg.ob[i].squad = new char[strlen(k.ob[i].squad)+1];
strcpy(ogg.ob[i].squad, k.ob[i].squad);
ogg.ob[i].stag= k.ob[i].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[i].gol = ob2.ogg.ob[i].gol;
ogg.ob[i].pres =ob2.ogg.ob[i].pres;
ogg.ob[i].squad = new char[strlen(ob2.ogg.ob[i].squad)+1];
strcpy(ogg.ob[i].squad, ob2.ogg.ob[i].squad);
ogg.ob[i].stag= ob2.ogg.ob[i].stag;
};
return;
};
int calcola_gol(){ int a;
a=0;
for(int i=0; i<25; i++){
a = a + ogg.ob[i].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[i].stag!=0){
i++;
};
if(i>=24){
cout<<"Carriera Piena, impossibile effettuare aggiunta nuova stagione";
exit(1);
};
ogg.ob[i].stag = p8.stag;
ogg.ob[i].pres = p8.pres;
ogg.ob[i].gol = p8.gol;
ogg.ob[i].squad = new char[strlen(p8.squad)+1];
strcpy(ogg.ob[i].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[i].gol = k.ob[i].gol;
ogg.ob[i].pres =k.ob[i].pres;
ogg.ob[i].squad = new char[strlen(k.ob[i].squad)+1];
strcpy(ogg.ob[i].squad, k.ob[i].squad);
ogg.ob[i].stag= k.ob[i].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[i].stag<<'\n';
stream<<"Squadra: "<<p5.ob[i].squad<<'\n';
stream<<"Presenze: "<<p5.ob[i].pres<<'\n';
stream<<"Gol fatti/subiti: "<<p5.ob[i].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[i].stag;
stream>>p5.ob[i].squad;
stream>>p5.ob[i].pres;
stream>>p5.ob[i].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;
};
aaa