alokacja tablicy wskaźników na obietky

0

Witam, mam problem z poniższym programem. Po skompilowaniu wysypuje się ;/ Może chodzi o złą alokację pamięci dla tablicy ?

#include <iostream>
#include <cstdlib>
#include <ctime>



using namespace std;



class Klocki
{

int rozmiar;
string kolor;
int masa;


public:
	string nazwa;
	Klocki(int roz , string kol , int mas, string nazw)
	{
		rozmiar = roz;
		kolor = kol;
		masa = mas;
		nazwa = nazw;
	}
	
	void wys()
	{
		cout<<endl<<"Rozmiar: "<<rozmiar<<endl<<"Kolor: "<<kolor<<endl<<"Masa: "<<masa<<endl<<"Nazwa: "<<nazwa<<endl<<endl;
	}	
};



class Prostopadloscian : public Klocki
{

int a,b,c;
public:
	Prostopadloscian ( int mas,int aa ,int bb , int cc) : Klocki (aa*bb*cc, "Niebieski" , mas, "Prostopadloscian")
	{		
	a=aa;
	b=bb;
	c=cc;
	}
};




class Walec : public Klocki
{	
int prom,wys;
public:

	Walec(  int mas,int pro ,int wy) : Klocki (pro*pro*3*wy, "Czerwony" , mas, "Walec")
	{		
	prom = pro;
	wys = wy;
	}
};




class Ostroslup : public Klocki
{
		
int polepod,wys;
public:
	Ostroslup ( int mas, int pole ,int wy) : Klocki (pole*wy, "Zielony" , mas, "Ostroslup")
	{	
	polepod = pole;
	wys = wy;
	}
};







int main()
{
	int liczba,a;
	srand(time(0));	
	Klocki **tab;
	Klocki *temp;

	cout<<"Ile klockow ma zostac wygenerowanych: ";
	cin>>liczba;
		

	for (int i=0; i<liczba ; i++)
	{
		a = rand() % 3;
		switch (a)
		{
		case 0: 
			tab[i] = new Prostopadloscian ( rand()%10,rand()%10,rand()%10,rand()%10);

			break;
		case 1:
			tab[i] = new Walec( rand()%10, rand()%10, rand()%10);

			break;
		case 2:
			tab[i] = new Ostroslup( rand()%10, rand()%10, rand()%10);

			break;
			
		}
	}
	
	
		for (int h =0 ; h< liczba ; h++)
		{
			for (int j = 0 ; j < liczba ; j++)
			{
				if(tab[j]->nazwa>tab[j+1]->nazwa)
				{
					temp=tab[j+1];
					tab[j+1]=tab[j];
					tab[j]=temp;
				}	
			}
		}


	
	for(int k = 0 ;  k<liczba ; k++)
	{
		
		tab[k]->wys();
		
	}



	system("PAUSE");
	return 0;
}
1
  1. brakuje
tab = new Klocki*[liczba];
  1. brakuje delete

  2. wyjście poza zakres:

for (int j = 0 ; j < liczba ; j++)
{
    if(tab[j]->nazwa>tab[j+1]->nazwa)

tab[j+1] dla j == liczba-1 nie istnieje

  1. Bawisz się ohydnymi wskaźnikami i dynamicznymi tablicami zamiast vectorem. Jak naprawisz ten punkt to 2 pierwsze też automatycznie znikną.

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