Mały program podatkowy

0

Witam, mam do napisania program który będzie obliczał podatek. W każdym mieście dodaje domy i liczę dla każdego miasta podatek od tych domów.

Problem jest taki że gdy dodam 4 raz dom do program wyrzuca błąd i nie wiem dlaczego.

A to kod:

 
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int a, n, l, w, m;

string u, s;
int liczba_domow;
int h[1];
int house = 0;

    int i, x;
    int loop = 0;

class Miasto
{
    public:
        string nazwa_miasta;
        int id_miasta;
        int id__miasta;
        Miasto(int id, string nm) : id_miasta(id), nazwa_miasta(nm){};

       
      
};



Miasto ma(1, "Wroclaw");
Miasto mb(2, "Krakow");
Miasto mc(3, "Poznan");




class Dom
{
    public:
        int house, m_id;
        int ktore_miasto;
        string ulica;
        int numer_domu;
        int liczba_mieszkancow;
        int wsp_lokalizacji;
        Dom(int m, string u, int n, int l, int w) : ktore_miasto(m), ulica(u), numer_domu(n), liczba_mieszkancow(l), wsp_lokalizacji(w)
        {
            house++;
            h[1] = house;

        };

        friend class Miasto;

        void dodaj_dom(int m, string u, int n, int l, int w);


};

void dodaj_dom()
{
    cout << "-------  Menu wprowadz dane : ------- " <<endl;
    cout << "=======================================" << endl;;
    cout << endl << "Podaj miasto: " << endl;

    cout << "1. Wroclaw, 2. Krakow, 3. Poznan " << endl;
    cout << ": ";
    cin >> m;
    cout << "-----------------------------------------" << endl;
    cout << "Podaj ulice" << endl;
    cout << ": ";
    cin >> u;
    cout << "-----------------------------------------"<< endl;
    cout << endl << "Podaj numer domu"<< endl;
    cout << ": ";
    cin >> n;
    cout << "-----------------------------------------"<< endl;
    cout << endl <<  "Podaj liczbe mieszkancow"<< endl;
    cout << ": ";
    cin >> l;
    cout << "-----------------------------------------"<< endl;
    cout << endl <<  "Podaj wspolczynnik lokalizacji" << endl;
    cout << ": ";
    cin >> w;
    cout << "-----------------------------------------"<< endl;

};

void jakie__miasto(int miasto_id)
{
                                if (miasto_id == 1)
                                {
                                    cout << ma.nazwa_miasta;
                                }
                                if (miasto_id == 2)
                                {
                                    cout << mb.nazwa_miasta;
                                }
                                if (miasto_id == 3)
                                {
                                    cout << mc.nazwa_miasta;
                                }
}



int main()
{
    int j,k, wspa, wspb, wspc;
    int st[300];
    string v,y,z;
    

                    wspa = 0;
                    wspb = 0;
                    wspc = 0;
                do
                {

                    
                    t[1] = new Miasto(1, "Wroclaw");
                    t[2] = new Miasto(2, "Krakow");
                    t[3] = new Miasto(3, "Poznan");
                    
                    
                    //////// wskażnik ilości pętli /////////

                    loop=loop+1;

                    ///////////////////////////////////////

                    liczba_domow = h[1];

                    ////////// Dodanie domu ///////////////

                    dodaj_dom();

                    ///////////////////////////////////////

                    ///////// Wskażnik tablicowy na obiekty klasy Dom ////////////

                    Dom *d[0];
                    d[loop] = new Dom(m, u, n, l, w);
                   
                    /////////////////////////////////////////////////////////////

                    
                    cout << "Loop: " << loop << endl; //////wskażnik pętli


                    // pętla do wyświetlenia wszystkich obiektów klasy Dom //////

                    



                            for (i=1; i<=loop; i++)
                                {
                                     //int s = d[i] -> ktore_miasto;  //// które miasto jest teraz
                                    //st[i] = s;
                                    //a.jakie_miasto(s);
                                    cout << d[45] ->ulica;
                                    cout << "======================== Dane zbiorcze:====================================== " <<endl;
                                    cout << s << endl;
                                    cout << "Miasto: ";
                                    //jakie__miasto(d[i]->ktore_miasto);
                                    cout << endl;
                                    cout << " Ulica: " << d[i] -> ulica << endl;
                                    cout << "Numer domu: " << d[i] -> numer_domu << endl;
                                    //cout << "----";
                                    cout << "Liczba mieszkancow: " << d[i] -> liczba_mieszkancow <<endl;
                                    cout << "Wspolczynnik lokalizacji: " << d[i] -> liczba_mieszkancow << endl;
                                    cout << "============================================================================="<<endl;
                                }
                        cout << "========= Zakonczyć: T(t) lub N(n) ===========" <<endl;
                        cin >> z;



                    ///////////////////// Podliczenie ///////////////////



                }
                while(z != "t");
                cout << "=================== Dane podatkowe ==================";
                Dom *d[0];
                    for (j=1; j<=loop; j++)
                    {
                        k = d[j] ->ktore_miasto;
                        cout <<k;
                        if( k == 1 )
                        {
                            wspa = (d[j]->liczba_mieszkancow * d[j]->wsp_lokalizacji) + wspa;
                        }
                        if( k == 2 )
                        {
                            wspb = (d[j]->liczba_mieszkancow * d[j]->wsp_lokalizacji) + wspb;
                        }
                        if( k == 3 )
                        {
                            wspc = (d[j]->liczba_mieszkancow * d[j]->wsp_lokalizacji) + wspc;
                        }

                    }
                    cout << endl << "Wrocław : " << wspa << endl;
                    cout << "Krakow : " << wspb << endl;
                    cout << "Poznan : " << wspc << endl;
}
0

Indeksacja tablic w C/C++ zaczyna się od zera.
Czyli jak zadeklarowałeś np:
int Tb[2]; to masz dwa elementy Tb[0] i Tb[1];
U ciebie:

  • deklarujesz h[1] a potem używasz element h[1] więc wyłazisz poza przydzieloną pamięć.
  • deklarujesz Dom[0] a używasz Dom[loop] więc wyłazisz daleko poza przydzieloną pamięć.

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