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];

2) brakuje delete

3) 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

4) 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, botów: 0