Salve a tutti, ho realizzato la struttura dati Coda con i puntatori. Però quando vado a testare il programma la compilazione va bene ma quando lo eseguo ci deve essere qualche errore di logica che non riesco a capire perchè il programma si blocca, mi compare una finestra di windows che mi dice:
L'istruzione a "0x00410bb0" ha fatto riferimento alla memoria a "0x77c0b814". La memoria non poteva essere "written".
Fare clic su ok per terminare l'applicazione
fare clic su annulla per eseguire il debug dell'applicazione
vi posto il codice che ho scritto:
e il relatico maincodice:#ifndef _codap_h #define _codap_h #include <iostream> using namespace std; //cella generica template <class Tipo> struct cella{ Tipo info; cella<Tipo> *succ; }; //la Coda è formata da 2 puntatori di tipo cella uno all'inizio della coda e uno alla fine template <class Tipo> struct codap{ cella<Tipo> *inizio; cella<Tipo> *fine; }; //La Coda: template <class Tipo> class Coda { public: Coda();//costruttore ~Coda();//distruttore //operatori della Coda void creaCoda(); bool codaVuota(); Tipo leggiCoda(); void inCoda(Tipo); void fuoriCoda(); bool appartiene(Tipo); //operatore aggiunto private: codap<Tipo> *coda; }; //costruttre template <class Tipo> Coda<Tipo>::Coda() { creaCoda(); } //distruttore template <class Tipo> Coda<Tipo>::~Coda() { if(!codaVuota()) { cella<Tipo> *tmp = coda->inizio; while(tmp!= NULL) { cella<Tipo> *tmp1= tmp->succ; delete(tmp); tmp=tmp1; } } } //Creacoda crea una nuova coda vuota template <class Tipo> void Coda<Tipo>::creaCoda() { coda->inizio = NULL; } //indica se una coda è vuota template <class Tipo> bool Coda<Tipo>::codaVuota() { return (coda->inizio == NULL); } //leggiCoda legge il contenuto di una cella template <class Tipo> Tipo Coda<Tipo>::leggiCoda() { if(!codaVuota()) return (coda->inizio->info); else cout<<"ERRORE: leggiCoda() a coda vuota!"<<endl; } //inCoda inserisce un nuovo elemento alla fine della codaù template <class Tipo> void Coda<Tipo>::inCoda(Tipo e) { if (codaVuota()) { coda->inizio = coda->fine = new cella<Tipo>; } else { coda->fine->succ = new cella<Tipo>; coda->fine = coda->fine->succ; } coda->fine->info = e; coda->fine->succ = NULL; } //fuoriCoda elimina l'elemento in cima alla coda template <class Tipo> void Coda<Tipo>::fuoriCoda() { if(!codaVuota()) { cella<Tipo> *tmp = coda->inizio; coda->inizio = coda->inizio->succ; delete (tmp); }else cout<<"ERRORE: fuoriCoda() a coda vuota!"<<endl; } //la funzione appartiene indica se un elemento si trova nella coda template <class Tipo> bool Coda<Tipo>::appartiene(Tipo e) { bool ret = false; cella<Tipo> *tmp = coda->inizio; while((tmp != NULL)&& (!ret)) { if (tmp->info == e) ret = true; else tmp = tmp->succ; } return ret; } #endif
mi dite come mai mi da questo problema???codice:#include "Coda.h" #include <iostream> using namespace std; //main int main() { Coda<int> c; c.inCoda(1); c.inCoda(2); c.inCoda(3); c.inCoda(4); cout<<"Stampo una Coda generica:\n"<<endl; while(!c.codaVuota()) { cout<<c.leggiCoda()<<endl; c.fuoriCoda(); } system("PAUSE"); return 0; }
Grazie in anticipo a tutti e ciao

Rispondi quotando