Wyciek pamięci - pomocy

0

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.

0

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...

5

Sprawdz w linii 116 mam przeczucie, że to o ten fragment chodzi

0

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?

0

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.

0

Niepokalane poczęcie.

0

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.

1

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.

0

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.

0

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?

0

A czemu po prostu nie odpalisz valgrinda z jakimś leak-check=full i po prostu nie odczytasz sobie skąd się biorą wyciecki?

0

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

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