Klasy i pochodne - problem z pamięcią

0

Cześć wszystkim ;).
Przerabiałem pewien program, który posiada klasę główną czlowiek, i klasę pochodną od niej - student. Nic specjalnego, w klasie głównej była dynamicznie alokowana tablica liczb double, teraz zmiana polega na tym, że tę tablicę zamieniłem z double na string i są pewne problemy z pamięcią (tak mi się wydaje, bo Visual Studio wyrzuca błąd, do którego screen dodam poniżej) podczas działania programu.
Załączam potrzebne kody źrodłowe:

W głównym pliku programu (w funkcji main) nie dzieje się również nic szczególnego, program był dotychczas w fazie testowania, a nie praktyczności. Są tam tworzone 3 obiekty typu czlowiek, 2 typu pochodnego, wykonywane jest np. działanie typu obiekt_klasy_podstawowej = obiekt_klasy_pochodnej, ta ostatnia operacje jednak nie ma wpływu na otrzymywany błąd, bo po wyłączeniu jej z kompilacji jest to samo.
Dodam, że poprzednia wersja tego programiku różniła się tylko tym, że tablica nie była string (ulubioneKsiazki), ale double i nazywała się wtab (właściwie mówimy o wskaźnikach, oczywiście) i wtedy wszystko działało. Coś jest zatem nie halo z tą tablicą, szczerze to nie pracowałem jakoś szczególnie na tablicach stringów, więc może coś nie tak zrobiłem.
Otrzymuję taki błąd oraz pusty call stack:
user image

Z góry dzięki za pomoc i zainteresowanie :).

0

Nie wiem gdzie robisz błąd w dostępie do pamięci a nie mam czasu tego rozkminiać, ale twój operator przypisania jest napisany źle, a nawet bardzo źle, bo zwraca zupełnie nowy obiekt zamiast modyfikować obiekt który masz. Poza tym nie rozumiem czemu nie uzyjesz vector<string>

0

Tutaj masz wyjście poza tablicę, w przypadku gdy this->rozmiar > other.rozmiar

43	        for(int i=0; i<rozmiar; i++)
44	        {
45	                t[i] = this->ulubioneKsiazki[i] = other.ulubioneKsiazki[i];
46	        }
0

Hmm, masz rację, dopisałem coś takiego:

// kopiowanie zawartosci tablicy
        for(int i=0; i<rozmiar; i++)
        {
			if(this->rozmiar > other.rozmiar) { cout << "Przerywamy kopiowanie, przekroczony rozmiar tablicy!\n"; break;}; 
                t[i] = this->ulubioneKsiazki[i] = other.ulubioneKsiazki[i];
        }

Ale nie pomogło, nadal jest to samo...

0
  1. w destruktorze źle uwalniasz pamięć dla tablicy

zamiast:

delete ulubioneKsiazki;

zrób:

delete[] ulubioneKsiazki;
  1. w przypisaniu dawaj zawsze porównanie z this lub swap:
    http://en.wikipedia.org/wiki/Assignment_operator_%28C%2B%2B%29
0

Super, teraz jest ok, wielkie dzięki :).
Szczerze, jeżeli chodzi o przeciążenia, tak dogłębnie tego nie ogarniałem, potrzebowałem tylko mieć zrobione, więc było to trochę 'na odwal'. Dopracuję to :).

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