Witam. Mam następujący problem. Mój program ma przyrostowe zużycie, czyli na pewno jest wyciek pamięci. Na 100% nie jest spowodowany moją alokacją i dealokacją. Sprawdzałem kod linijka po linijce, niczego nie przeoczyłem. Moje pytanie brzmi: jakie mogą być inne źródła wycieków? Piszę w C++Builder6. Używałem już CodeGuard, ale on sprawdza tylko czy zgadza się ilość new z ilością delete, to za mało.
Nie koniecznie chodzi o kasowanie obiektów. Swego czasu nawet w mądrości swojej spłodziłem pięknego memleaka w JavaScripcie :D W grę wchodzi buffer overflow, handle leak...
Sprawdz w linii 116 mam przeczucie, że to o ten fragment chodzi
jak się nie wie o co chodzi to się nie odpowiada na posty
sory, ale to było do twojego podpisu, myślałem, że to twoja odpowiedz na post. Nie zamieszczę fragmentu kodu. Proszę o odpowiedź na pytanie: jakie mogą być jeszcze przyczyny wycieków?
Błędnie niszczone kontenery ze wskaźnikami?
EDIT
Możesz spróbować jeszcze statycznej analizy kodu. Jest np. taki program: http://cppcheck.sourceforge.net/
Spróbuj i daj znać czy coś pomogło a jak nie to też daj znać. Jestem ciekaw na ile przydatne jest takie narzędzie w projekcie.
Niepokalane poczęcie.
Proponuję wszędzie gdzie używasz operatorów new i delete zastąpić to po prostu auto_ptr z biblioteki standardowej <memory>.
Nie będziesz miał wtedy problemów z wyciekami.
Może jeszcze przyczyną być używanie złego delete, a konkretnie delete tablica_obieków; - nie zostaną wywołane destruktory wszystkich obiektów, a tylko jednego. Musi być delete [] tablica_obiektów;
Bez pokazania kodu, w którym masz ten wyciek nikt Ci nic więcej z kryształowej kuli nie wywróży.
Loguj w jakich funcjach wywołujesz new i w jakich delete i najlepiej jeszcze adresy jaki zwróci new i jaki przekazujesz do delete. Dla ułatwienie możesz przeciążyć new i delete i wpisywać do loga stack trace'y z tych funkcji.
Poza tym są narzędzia do detekcji memory leaków, Na Linuksie jest Valgrind, na Windowsie możesz użyć Boehm GC z włączoną opcją detekcji leaków.
Jakość pytania wpływa na jakość odpowiedzi, więc nie spodziewaj się cudów.
Całkiem możliwe, że twój algorytm jest zły i ma po prostu dużą złożoność pamięciową (nie oznacza to wycieku pamięci).
Poza tym co rozumiesz przez: "Mój program ma przyrostowe zużycie, czyli na pewno jest wyciek pamięci."? Po godzinie działania zajmuje ci 1.5 GB? Czy może przeszkadza ci to, że proces w pamięci zajmuje 120 MB i stwierdzasz to za pomocą task menager'a?
A czemu po prostu nie odpalisz valgrinda z jakimś leak-check=full i po prostu nie odczytasz sobie skąd się biorą wyciecki?
Ja używam do wykrywania wycieków programu AQTime Pro (http://smartbear.com/products/development-tools/performance-profiling)
Sprawdza się doskonale. Jest wersja trialowa.
pzdr
squash