Witam,
jestem w trakcie pisania projektu, jednakże pojawił się pewien problem, którego nie mogę pokonać.
Znalazłem wyciek pamięci i zacząłem go łatać. Niestety jakimś cudem podczas usuwania tablicy obiektów program mi strasznie zwolnił (a nawet zatrzymał) w destruktorze klasy.
Bardzo proszę o rady i nakierowanie mnie, co mogę robić źle. Tak, muszą być stare i złe tablice, bo to zadanie akademickie :-)
Klasa, w której jest problem
class TabuLista {
public:
int *sasiedzi_prawo;
int *sasiedzi_lewo;
int ile, b;
TabuLista() {}
~TabuLista(){
delete[] sasiedzi_lewo;
delete[] sasiedzi_prawo;
}
void tworzenie(int a, int i) {
ile = a;
b = i;
sasiedzi_prawo = new int[ile];
sasiedzi_lewo = new int[ile];
for (int i = 0; i < ile; i++) {
sasiedzi_lewo[i] = 0;
sasiedzi_prawo[i] = 0;
}
}
Deklaracja tablicy tych obiektów (wszystkie będą miały w sobie po dwie tablicę int)
TabuLista *lista;
lista = new TabuLista[wielkosc];
for (int i = 0; i < wielkosc; i++) {
lista[i].tworzenie(ile_sasiadow, i);
}
A zwalniam je następująco
delete[] lista; //z tego, co wyczytałem to takie wywołanie powinno wywołać destruktor każdego z elementów tablicy
Co robię nie tak? Gdzie jest błąd rozumowania?
Kiedy usunę zwalnianie pamięci, wszystko bardzo ładnie się wykonuje, ale niestety - mój RAM ma skończoną pojemność :-)
Dorzuciłem do kodu kilka linijek wypisujących dane na ekran - program zatrzymuje się już przy próbie zwolnienia pierwszej tablicy (w destruktorze klasy).
Pozdrawiam serdecznie
mrozo