Salve a tutti. Ho cercato nel forum possibili soluzioni per il mio problema ma non ne sono ancora venuto a capo, per cui chiedo il vostro aiuto.
Questi sono i file che ho creato:
codice://File distributore.h #ifndef DISTRIBUTORE_H #define DISTRIBUTORE_H #include <string> #include <vector> #include <cassert> #include <iostream> #include <algorithm> using namespace std; class Film { friend ostream& operator<<(ostream& os, const Film& f); public: Film(string t, string r, unsigned a); string Titolo() const {return titolo;} string Regista() const {return regista;} unsigned Anno() const {return anno;} Film* TrovaOriginale() const {return originale;} void AggiornaCatalogo(unsigned c) {catalogo.first += c; catalogo.second += c;} void UscitaFilm() {catalogo.second--;} void RitornaFilm() {catalogo.second++;} void FissaOriginale(Film* f); bool operator==(const Film& f) const {return titolo == f.titolo && regista == f.regista;} pair<unsigned, unsigned> CopieFilm() const {return catalogo;} private: string titolo, regista; unsigned anno; Film* originale; bool remake; pair<unsigned,unsigned> catalogo; //catalogo.first = copie_totali, catalogo.second = copie_presenti }; class Distributore { friend ostream& operator<<(ostream& os, const Distributore& d); public: Distributore(string n) {nome = n;} string Nome() const {return nome;} Film* VediFilm(unsigned i) const {return films[i];} int NumFilm() const {return films.size();} void InserisciFilm(Film* f, unsigned c); void EliminaFilm(Film* f); void EsceFilm(Film* f); void RitornaFilm(Film* f); pair<unsigned, unsigned> CopieFilm(Film* f); vector<Film*> ListaFilmPerAnno(unsigned a); vector<Film*> ListaRemake(); private: string nome; vector<Film*> films; int TrovaFilm(Film*); }; #endifcodice://File distributore.cpp #include "distributore.h" Film::Film(string t, string r, unsigned a) : titolo(t) { regista = r; anno = a; } void Film::FissaOriginale(Film* f) { (*this).remake = true; (*this).originale = f; (*f).remake = false; } int Distributore::TrovaFilm(Film* f) { for (unsigned i = 0; i < films.size(); i++) if (films[i] == f) return i; return -1; } void Distributore::InserisciFilm(Film* f, unsigned c) { int indice = TrovaFilm(f); if (indice != -1) f -> AggiornaCatalogo(c); else { films.push_back(f); f -> AggiornaCatalogo(c); } } pair<unsigned,unsigned> Distributore::CopieFilm(Film* f) // da rivedere!!! { pair <unsigned,unsigned> copie_film = (f -> CopieFilm()); return copie_film; } void Distributore::EliminaFilm(Film* f) { int indice = TrovaFilm(f); pair <unsigned,unsigned> copie = (CopieFilm(f)); assert (indice != -1); assert (copie.first == copie.second); films.erase(films.begin() + indice); } void Distributore::EsceFilm(Film* f) { assert (TrovaFilm(f) != -1); pair <unsigned,unsigned> copie_film = (CopieFilm(f)); assert (copie_film.second > 0); f -> UscitaFilm(); } void Distributore::RitornaFilm(Film* f) { assert (TrovaFilm(f) != -1); pair <unsigned,unsigned> copie_film = (CopieFilm(f)); assert (copie_film.second < copie_film.first); f -> RitornaFilm(); } ostream& operator<<(ostream& os, const Film& f) { os << "Il film " << f.titolo << " del regista " << f.regista << endl; if (f.remake) os << " e' un remake del film " << f.originale -> Titolo() << " del regista " << f.originale -> Regista() << ".\n" << endl; else os << " e' un film originale.\n" << endl; os << "Di questo film ci sono " << f.catalogo.first << " copie, di cui " << f.catalogo.second << " attualmente presenti.\n\n" << endl; return os; } ostream& operator<<(ostream& os, const Distributore& d) { os << "In questo distributore sono presenti i seguenti film: \n\n" << endl; for (unsigned i = 0; i < d.films.size(); i++) os << *(d.films[i]); return os; }Ho compilato i programmi usando Cygwin e inizia stampando correttamente i primi 3 film inseriti ed al quarto film dopo aver stampato il titolo ed il regista mi dà l'errore:codice:#include "distributore.h" int main() { Distributore d1("Chivideo"); Film f1("Alice in wonderland","R. Polanski",1997), f2("F Punto","F. Miccoli",2002), f3("La donna dei vampiri","M. Rossi",2006), f4("Chatroulette","G. Yespica",2008) , f5("Il frate","G. Abacuz",2003), f6("Gigi la trottola","G. Gialli",1999), f7("30 Giorni","L. Verdi",2001); f7.FissaOriginale(&f1); f3.FissaOriginale(&f2); d1.InserisciFilm(&f1, 20); d1.InserisciFilm(&f2, 30); d1.InserisciFilm(&f3, 15); d1.InserisciFilm(&f4, 25); d1.InserisciFilm(&f5, 8); d1.InserisciFilm(&f6, 10); d1.InserisciFilm(&f7, 14); cout << d1; return 0; }
Segmentation fault (core dumped)
Da quello che ho capito girando nel forum dovrebbe essere un problema di indirizzamento, ma la mia scarsa esperienza non mi permette di identificare il problema e tantomeno di risolverlo.
Ogni aiuto sarà ben apprezzato!!!
Grazie in anticipo.

Rispondi quotando
