Inne artykuły
Wykrywanie wycieków pamięci za pomocą Visual C++
[artykuł] Artykuł opisuje w jaki sposób wykrywa się wycieki pamięci we własnych aplikacjach za pomocą Visual C++.Jeśli chcemy wykryć wycieki pamięci w naszej aplikacji musimy dodać następujące wpisy:
#define _CRTDBG_MAP_ALLOC
#include <cstdlib>
#include <crtdbg.h>
Na samym końcu programu (tj. przed return 0;) należy jeszcze dopisać:
Powyższa linijka jest odpowiedzialna za zrzut do okna "Output" wycieków pamięci. Jeśli jej nie wywołamy to nie zobaczymy żadnych wycieków pamięci.
Kojelnym mykiem jaki warto zastosować to dodanie następującego wiersza w naszym programie:
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
Dzięki niemu wskazywane jest miejsce wystąpienia wycieku tj. miejsce w którym została zarezerwowana pamięć i ta pamięć nie została zwolniona. Ważne jest aby ta linijka znalazła się za wszystkimi dołączonymi plikami nagłówkowymi.
Pamiętajmy o tym, że define ma zasięg lokalny, tj. ogranicza się tylko i wyłącznie do jednego pliku tak więc każdy plik w którym chcemy mieć podane wystąpienie błędu musi zawierać wyżej wspomniany wiersz.
Jeśli chcemy wykonać jakieś dodatkowe operacje związane z alokacją czy też dealokacją pamięci możemy to zrobić alternatywną metodą. Wygląda ona następująco:
void * operator new( size_t s, const char * filename, unsigned int lineno )
{
return _malloc_dbg( s, _NORMAL_BLOCK, filename, lineno );
}
void operator delete( void * ptr, const char * filename, unsigned int lineno )
{
_free_dbg( ptr, _NORMAL_BLOCK );
}
#define new new(__FILE__,__LINE__)
Powyższa metoda została sprawdzona pobieżnie i działa, jednak prawdopodobnie trzeba jeszcze napisać sobie obsługę operatora delete[] - pierwsze rozwiązanie jednak powinno być zadowalające tak więc alternatywne rozwiązanie zamieściłem czysto informacyjnie.
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.