_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 FALSE
wartość .
Uwagi
Funkcja _CrtMemDifference
porównuje oldState
i newState
przechowuje ich różnice w stateDiff
programie , 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.h
pliku , 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 stateDiff
element , newState
lub oldState
ma NULL
wartość , 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
_doserrno
i jest ustawiona na EINVAL
, a _sys_nerr
funkcja zwraca wartość FALSE
.
_CrtMemDifference
Porównuje _CrtMemState
wartości pól bloków w obiekcie z tymi w oldState
newState
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.