Program kolejka crashuje przy próbie delete?

0

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;
	
} 
0

Hej,

a nie współdzielisz elementów między kolejkami, tzn. że wskażniki obu kolejek wskazują na ten sam element, a póżniej dwukrotnie próbujesz użyć delete to się wywala?

0

Nie jestem mistrzem w c++ ale wydaje mi sie ze nie, bo przy kopiowaniu elementow kolejji tworze nowe obiekty klasy element przez uzycie new a potem do tego elementu przepisuje tylko wartosc inta a nie adres. Chyba ze cos zle rozumiem lub robie

1 użytkowników online, w tym zalogowanych: 0, gości: 1