Wycieki pamięci analiza

0

Witam,
poszukuję aplikacji linuxowej, która pomaga w analizie możliwych wycieków pamięci. Posiadam aplikację (+ kod), którą chciałem przetestować pod względem ewentualnych wycieków. Aplikacja jest napisana obiektowo w C++ i wykorzystuje elementy biblioteki napisanej w C.

0

Ok, znalazłem coś takiego jak Valgrind. Patrząc na dokumentację to chyba to czego szukałem. Wygląda jednak na to (bazując na informacji w dokumentacji), że analiza działa dość długo. Czy ktoś kto używał tego typu narzędzi, mógłby się wypowiedzieć, czy to dobry analizator? Może jest coś przyjemniejszego.
Dodam jeszcze, że aplikacja nie jest zbyt duża (3000 linii kodu) i jej analizę pragnę wykorzystać w celach edukacyjnych. Po prostu chcę potwierdzić zwolnienie całej zadeklarowanej pamięci :)

0

Zwykle w tego typu aplikacjach trzeba liczyć się ze spowolnieniem 10-100x.
Jest jeszcze Electric Fence.

0

A istnieje jakaś inna metoda analizy, która działa szybko? Być może jakaś metoda związana z samym podejściem implementacyjnym, dzięki czemu w samej aplikacji mógłbym przedstawić raport pamięci?

0

Dla Visual Studia istnieje cos takiego jak VisualLeakDetector, jest to jeden plik naglowkowy ktory przedefiniowuje operatory new i delete na makra i po zakonczeniu aplikacji robi raport czy kazdy new mial odpowiadajacy mu delete. Nie wiem czy cos takiego istnieje pod linuxa.

http://www.codeproject.com/KB/applications/visualleakdetector.aspx

0
Qbek napisał(a)

A istnieje jakaś inna metoda analizy, która działa szybko? Być może jakaś metoda związana z samym podejściem implementacyjnym, dzięki czemu w samej aplikacji mógłbym przedstawić raport pamięci?

Aby ulżyć w cierpieniach ludowi programującemu miast i wsi, towarzysz lenin wymyślił smart pointery http://www.codeproject.com/KB/stl/boostsmartptr.aspx,
natomiast dla opornych towarzysz bierut wymyslił google: http://tinyurl.com/28uvl8k

0

Mam mały problem. Dla poniższej funkcji i wywołania:
funkcja:

string* getFile(const string path) {
 string *p = new string[100];
 return p;
}

wywołanie w kodzie:

string* file = getFile(path);
delete file;

Valgrind zwraca:

404 bytes in 1 blocks are definitely lost in loss record 1 of 1
==7665==    at 0x402630E: operator new[](unsigned int) (vg_replace_malloc.c:268)
==7665==    by 0x804B2F2: getFile(string) (in /home/test)
==7665==    by 0x805219E: main (in /home/test)

Czy mógłby mi ktoś powiedzieć gdzie tutaj jest wyciek pamięci?

0
delete[] file;
0

delete[] ?

edit: @_0x666_ mnie uprzedzil :)

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