Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[C++] Wartość zmiennej zmienia się w destruktorze

#1
[C++] Wartość zmiennej zmienia się w destruktorze
Stworzyłam dwie klasy: jedna tworzy ciastka, a druga ich tablicę. Kiedy tworzę blachę w mainie, to wszystko przebiega bez problemów. Jednak kiedy chcę to usunąć to wszystko się wywala. Co zabawne - znalazłam przyczynę błędu, ale nie wiem jak to naprawić. Mianowicie zmiennej 'ile' przypisuję w konstruktorze konkretną wartość. Jednak zauważyłam, że ta wartość jest inna w destruktorze Blachy (testowa linijka przed pętlą for) i zamiast być 100 to przyjmuje wartość kilku milionów!

Dlaczego tak sie dzieje? Jak to można naprawić?

Kod programu:

Kod:
#include <iostream>
using namespace std;

class Ciastko{
    public:
    Ciastko(){
        cout << "Upiekles ciastko" << endl;
    }
    ~Ciastko(){
        cout << "Zjadles ciastko" << endl;
    }
};

class Blacha{
    Ciastko *ciastka[];
    int ile;
    public:
    Blacha(int ile_ciastek){
        ile=ile_ciastek;
        for(int i=0; i ciastka[i]=new Ciastko;
        cout << "Upiekles " << ile_ciastek << " ciastek" << endl;
    }
    ~Blacha(){
        cout << "Test: ile= " << ile << endl;
        for(int i=0; i<ile; i++)
            delete ciastka[i];
        cout << "Zjadles " << ile << " ciastek." << endl;
    }
};

int main(){
    Blacha* blacha = new Blacha(100);
    delete blacha;
}
 System operacyjny: windows_seven Przeglądarka: firefox
#2
RE: [C++] Wartość zmiennej zmienia się w destruktorze
W klasie Blacha zdaje się, że chcesz utworzyć dynamiczną tablicę dynamicznych obiektów, ale tego nie uczyniłeś. Najpewniej w pętli nadpisujesz zmienną ile (przypisujesz do niej adres nowo utworzonego obiektu). Poniżej masz działający program:
Kod:
#include <iostream>
using namespace std;

class Ciastko{
   public:
   Ciastko(){
       cout << "Upiekles ciastko" << endl;
   }
   ~Ciastko(){
       cout << "Zjadles ciastko" << endl;
   }
};

class Blacha{
   Ciastko **ciastka;
   int ile;
   public:
   Blacha(int ile_ciastek){
       ile=ile_ciastek;
       ciastka = new Ciastko*[ile];
       for(int i=0; i < ile; i++)
           ciastka[i]=new Ciastko;
       cout << "Upiekles " << ile_ciastek << " ciastek" << endl;
   }
   ~Blacha(){
       cout << "Test: ile= " << ile << endl;
       for(int i=0; i<ile; i++)
           delete ciastka[i];
       delete[] ciastka;
       cout << "Zjadles " << ile << " ciastek." << endl;
   }
};

int main(){
   Blacha* blacha = new Blacha(100);
   delete blacha;
}
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#3
RE: [C++] Wartość zmiennej zmienia się w destruktorze
Bardzo Ci dziękuję za odpowiedź. Wesoły
 System operacyjny: windows_seven Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki ([C++] Wartość zmiennej zmienia się w destruktorze)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  wczytywanie zmiennej z innego pliku batch grymariusza 7 14009 18.12.2017, 17:34
Ostatni post: broda99
  Batch - odczytywanie temperatury karty graficznej i zapisywanie jej do zmiennej ~Anonim 4 12216 03.09.2017, 21:41
Ostatni post: ~Anonim
Ściana batch file ustawianie jednej wartosci zmiennej do kilku plikow kulis88 6 2764 03.08.2017, 19:12
Ostatni post: kulis88

Skocz do: