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:
codice:
#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
e il relatico main
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;
}
mi dite come mai mi da questo problema???
Grazie in anticipo a tutti e ciao