Udostępnij przez


_CrtMemDifference

Porównuje dwa stany pamięci i zwraca ich różnice (tylko wersja debugowania).

Składnia

int _CrtMemDifference(
   _CrtMemState *stateDiff,
   const _CrtMemState *oldState,
   const _CrtMemState *newState
);

Parametry

stateDiff
Wskaźnik do struktury używanej _CrtMemState do przechowywania różnic między dwoma stanami pamięci (zwracane).

oldState
Wskaźnik do wcześniejszego stanu pamięci (_CrtMemState struktura).

newState
Wskaźnik do późniejszego stanu pamięci (_CrtMemState struktura).

Wartość zwracana

Jeśli różnica w stanach pamięci jest znacząca, _CrtMemDifference zwraca wartość TRUE. W przeciwnym razie funkcja zwraca FALSEwartość .

Uwagi

Funkcja _CrtMemDifference porównuje oldState i newState przechowuje ich różnice w stateDiffprogramie , które następnie mogą być używane przez aplikację do wykrywania przecieków pamięci i innych problemów z pamięcią. Gdy _DEBUG nie jest zdefiniowana, wywołania do _CrtMemDifference są usuwane podczas przetwarzania wstępnego.

newState i oldState muszą być prawidłowym wskaźnikiem _CrtMemState do struktury zdefiniowanej w crtdbg.hpliku , która _CrtMemCheckpoint została wypełniona przed wywołaniem metody _CrtMemDifference. stateDiff musi być wskaźnikiem do wcześniej przydzielonego wystąpienia _CrtMemState struktury. Jeśli stateDiffelement , newStatelub oldState ma NULLwartość , wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, errno, , _sys_errlist_doserrnoi jest ustawiona na EINVAL , a _sys_nerr funkcja zwraca wartość FALSE.

_CrtMemDifferencePorównuje _CrtMemState wartości pól bloków w obiekcie z tymi w oldStatenewState pliku i przechowuje wynik w .stateDiff Gdy liczba przydzielonych typów bloków lub łączna liczba przydzielonych bloków dla każdego typu różni się między dwoma stanami pamięci, różnica w stanach jest uznawana za znaczącą. Różnica między największą kwotą, jaką kiedykolwiek przydzielono jednocześnie dla dwóch stanów, a różnicą między łącznymi alokacjami dla obu stanów są również przechowywane w systemie stateDiff.

Domyślnie wewnętrzne bloki czasu wykonywania języka C (_CRT_BLOCK) nie są uwzględniane w operacjach stanu pamięci. Funkcja _CrtSetDbgFlag może służyć do włączania _CRTDBG_CHECK_CRT_DF bitu _crtDbgFlag , aby uwzględnić te bloki w wykrywaniu przecieków i innych operacjach stanu pamięci. Zwolnione bloki pamięci (_FREE_BLOCK) nie powodują _CrtMemDifference zwrócenia wartości TRUE.

Aby uzyskać więcej informacji na temat funkcji stanu sterta i _CrtMemState struktury, zobacz Funkcje raportowania stanu stert. Aby uzyskać informacje na temat przydzielania, inicjowania i zarządzania blokami pamięci w wersji debugowania sterty podstawowej, zobacz szczegóły sterty debugowania CRT.

Wymagania

Procedura Wymagany nagłówek Opcjonalny nagłówek
_CrtMemDifference <crtdbg.h> <errno.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Biblioteki: debugowanie tylko wersji bibliotek środowiska uruchomieniowego języka C.

Zobacz też

Procedury debugowania
_crtDbgFlag