[C++] Zarządzanie pamięcią - Macierz (reference count)

Chungu
Użytkownik
Użytkownik
Posty: 121
Rejestracja: 21 paź 2016, o 20:57
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 42 razy

[C++] Zarządzanie pamięcią - Macierz (reference count)

Post autor: Chungu »

Witam.

Usiłuję napisać klasę, reprezentującą macierz. Mam przy tym użyć zliczania referencji (w skrócie: zamiast trzymać w pamięci wiele takich samych obiektów trzymam jeden, a poszczególne macierze mają tylko odwołania do niego).

Zadanie prawie wykonałem, jednak moja klasa "wyszła" dosyć zagmatwana i w wyniku tego po przeskanowaniu valgrindem otrzymuje wyciek pamieci i pewne inne errory. Poniżej zamieszczam jedynie część (całość wyszła mi trochę długa) w której moim zdaniem znajdują się pewne błędy...

Moja klasa:
Ukryta treść:    
Oddziele klase i funkcje od main'a dla większej przejrzystości...
Ukryta treść:    
Poniżej zapis z valgrinda:
Ukryta treść:    
Wydaje mi się że zawarłem wszystko co potrzeba, jeżeli czegoś tutaj nie to dokleję... Dzięki z góry za wszelką pomoc bo jakoś sporo już nad tym siedzę, kod stał się nieczytelny (jest "trochę" większy niż ten wyżej :wink: ) i nie mam pojęcia już co jest dobrze, a co źle... Na razie chcę spróbować doprowadzić go do działania (w sensie wycieków) a porządkami zajmę się później ;)

BTW. Tak, wiem że dostęp do tej tablicy to potworek... i już przekonałem się, że jest on "błędogenny" ale poprawie to po znalezieniu tego wycieku :)

Z góry dzięki.
Awatar użytkownika
Igor V
Użytkownik
Użytkownik
Posty: 1605
Rejestracja: 16 lut 2011, o 16:48
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 18 razy
Pomógł: 604 razy

Re: [C++] Zarządzanie pamięcią - Macierz (reference count)

Post autor: Igor V »

Nie wiem czy rozwiązałeś już problem (przyznaję się że nie analizowałem za bardzo kodu), ale polecam skorzystać z debuggera. Stawiasz marker na linii w której podejrzewasz że Ci się wysypuje oraz bezpośrednio za nią. W między czasie możesz podglądać "online" jak Ci się zmieniają wartości i adresy stałych/zmiennych itp. To będziesz widział wtedy czy i jak Ci skoczy z jednego breakpoint-a do drugiego i czy faktycznie tam się źle dzieje. Valgrind to chyba ostateczne rozwiązanie, jako że nie jest natywnym programem w C++.
ODPOWIEDZ