Pokaż wyniki 1 do 4 z 4

Temat: wektor - problem z pamiecia

  1. #1

    Domyślnie wektor - problem z pamiecia

    Czy moglabym prosic o sprawdzenie dlaczego w tym kodzie pojawia sie problem z pamiecia?

    Kod:
    #include<iostream>
    #include<cstring>
    using namespace std;
    
    class osoba {
        private:
            char* nazwisko;
            int len;
        public:
            osoba(const char* n = NULL);
            friend ostream &operator<<(ostream &s, const osoba &o);
            friend ostream &operator<<(ostream &s, const osoba *wsk);
    };
    //******************************************************************8
    osoba::osoba(const char *n){
        len = strlen(n);
        nazwisko = new char[len+1];
        strcpy(nazwisko,n);
    }
    ostream &operator<<(ostream &s, const osoba &o){
        s << o.nazwisko;
        return s;
    }
    
    ostream &operator<<(ostream &s, const osoba *wsk){
        s << wsk->nazwisko;
        return s;
    }
    
    const int pojemnosc_wektora = 15;
    
    class vector{
            osoba tab1[pojemnosc_wektora];
            int ile_obiektow;
        public:
            vector(): ile_obiektow(0) { } 
            int wstaw(const osoba &nowy, int gdzie = -1);   
            void usun(int nr);
     osoba &co_na(int pozycja) {return tab1[pozycja];} 
    
            friend ostream& operator<<(ostream & stru, vector &x);
        private:
            void rozsun(int pozycja);
            void zsun(int nr);
    };
    
    ostream &operator<<(ostream &stru, vector &spis){
        stru << "     ";
        for (int i = 0; i < spis.ile_obiektow; i++){
            stru << i << ") " << spis.tab1[i] << " ";
        }
        stru << endl;
        return stru;
    }
    /**********************************************************************************************/
    void vector::rozsun(int pozycja){
        for (int i = ile_obiektow; i < pozycja; i--){
            tab1[i] = tab1[i-1];
        }
    }
    
    void vector::zsun(int nr){
        for (int i = nr; i < ile_obiektow; i++){
            tab1[i] = tab1[i+1];
        }
    }
    
    int vector::wstaw (const osoba &nowy, int gdzie){
        if(ile_obiektow == pojemnosc_wektora){
            cout << "Wektor zostal juz zapelniony\n";
            return 0;
        }
    if (gdzie < 0 || gdzie > ile_obiektow){   
            gdzie = ile_obiektow;
        }
    
        rozsun(gdzie);
        tab1[gdzie] = nowy;
        ile_obiektow++;
        return 1;
    }
    
    void vector::usun(int nr){
        if(nr < ile_obiektow){   
            zsun(nr);
            ile_obiektow--;
        }
    }
    
     int main() {
        osoba
            wloch("Vivalidi"),
            niemiec("Bethoveen"),
            austriak("Mozart"),
            polak("Chopin");
    
        cout << "Przedstawia sie wloch: " << wloch << endl;
    
        osoba *kapelmistrz = &austriak;
        cout << "Kapelmistrzem jest dzisiaj: " << *kapelmistrz << endl;
    
        cout << polak << endl;
        
        vector muzycy;
        cout << "sizeof(muzycy)= " << sizeof(muzycy) <<endl;
    
        muzycy.wstaw(niemiec);
        muzycy.wstaw(wloch);
        cout << muzycy;
    }
    Z gory bardzo dziekuje za pomoc!

  2. #2

    Domyślnie

    Okey, juz wykrylam swoje bledy.
    Czyli temat do zamkniecia.

  3. #3

    Domyślnie

    Cytat Napisał Gosik Zobacz post
    Okey, juz wykrylam swoje bledy.
    Czyli temat do zamkniecia.
    W takim razie nie bądź egoistą, podziel się.

  4. #4

    Domyślnie

    OK, nie ma problemu.
    1. W konstruktorze mam mam n = NULL, co jest bledem, powinno byc n = " "
    2. blad w funkcji rozsun, powinno byc: for (int i = ile_obiektow; i > pozycja; i--)

    i to tyle

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj