Witam
Na zajęciach miałem zrobić program implementujący kolejkę. Generalnie działa, tylko przy kończeniu programu crashuje, prawdopodobnie przy delete. Mógłby ktoś rzucić okiem i sprawdzić czemu tak się dzieje?
http://wklej.to/qbto7
#include <iostream>
using namespace std;
class Kolejka
{
private:
class Element
{
public:
int liczba;
Element *nastepny;
Element()
{
nastepny=NULL;
}
};
Element *pierwszy;
Element *ostatni;
public:
Kolejka()
{
pierwszy=NULL;
ostatni=NULL;
}
Kolejka(Kolejka *kolejka)
{
if (kolejka->pierwszy!=NULL)
{
pierwszy= new Element;
Element *aktualny=kolejka->pierwszy;
Element *nowy;
pierwszy->liczba=aktualny->liczba;
//pierwszy->nastepny=aktualny->nastepny;
nowy=pierwszy;
while(aktualny!=kolejka->ostatni)
{
nowy->nastepny=new Element;
nowy=nowy->nastepny;
aktualny=aktualny->nastepny;
nowy->liczba=aktualny->liczba;
}
ostatni->liczba=kolejka->ostatni->liczba;
}
else
{
pierwszy=ostatni=NULL;
}
}
~Kolejka()
{
Element *pierwszy_temp;
while(pierwszy->nastepny!=ostatni)
{
pierwszy_temp=pierwszy;
pierwszy=pierwszy->nastepny;
delete pierwszy_temp;
}
delete ostatni;
}
int f_pierwszy()
{
if(pierwszy!=NULL)
{
return pierwszy->liczba;
}
}
void usun_pierwszy()
{
Element *pierwszy_temp;
if(pierwszy->nastepny!=NULL)
{
pierwszy_temp=pierwszy;
pierwszy=pierwszy->nastepny;
delete pierwszy_temp;
}
}
void dodaj_na_koniec(int aliczba)
{
if(pierwszy==NULL)
{
pierwszy=new Element;
pierwszy->liczba=aliczba;
ostatni=pierwszy;
}
else
{
Element *element;
element=pierwszy;
while(element->nastepny!=NULL)
{
element=element->nastepny;
}
ostatni=new Element;
element->nastepny=ostatni;
//ostatni=element->nastepny;
ostatni->liczba=aliczba;
}
}
bool pusta()
{
if (pierwszy==NULL) return false;
else return true;
}
void wyswietl()
{
if (pierwszy!=NULL)
{
Element *aktualny;
aktualny=pierwszy;
while(aktualny->nastepny!=NULL)
{
cout<<aktualny->liczba<<endl;
aktualny=aktualny->nastepny;
}
cout<<ostatni->liczba<<endl;
}
}
};
main()
{
Kolejka *kolejka=new Kolejka();
//cout<<kolejka->pusta()<<endl;
for(int i=0;i<10;i++)
{
kolejka->dodaj_na_koniec(i*5);
}
cout<<"Wyswietlanie 1 kolejki:"<<endl;
kolejka->wyswietl();
cout<<endl<<endl;
for(int j=0;j<5;j++)
{
kolejka->usun_pierwszy();
cout<<"aktualny pierwszy element: "<<kolejka->f_pierwszy()<<endl;
}
cout<<"Wyswietlanie 2 kolejki:"<<endl;
Kolejka *kolejka2=new Kolejka(kolejka);
kolejka2->wyswietl();
delete kolejka, kolejka2;
cin.get();
cin.get();
return 0;
}