Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Załóżmy, że po uruchomieniu wersji debugowania aplikacji MFC nie ma żadnych problemów.Jednak wersji tej samej aplikacji ulega awarii, zwraca nieprawidłowe wyniki, i/lub nieprawidłowe działanie wykazuje celowość.
Ten problem może być spowodowane po umieszczeniu ważny kod w instrukcji ASSERT, aby sprawdzić, czy działa poprawnie.Ponieważ ASSERT instrukcje są przekształcane w wydanej kompilacji programu MFC, kod nie działa w wydanej kompilacji.
Jeśli używasz ASSERT celu potwierdzenia, że udało się wywołanie funkcji, należy rozważyć użycie VERIFY w zamian.Makro WERYFIKUJ ocenia argumenty w obu debugowania i buduje wersji aplikacji.
Innego preferowanego technika jest przypisać wartość zwracana przez funkcję do zmiennej tymczasowej, a następnie przetestować zmiennej w instrukcji ASSERT.
Sprawdź poniższy fragment kodu:
enum {
sizeOfBuffer = 20
};
char *buf;
ASSERT(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );
Ten kod uruchamia idealnie wersji debug aplikacji MFC.Jeśli wywołanie calloc( ) pojawia się komunikat diagnostyczny, zawierający plik i numerem wiersza się nie powiedzie,.Jednakże w handlu detalicznym budowanie aplikacji MFC:
wywołanie calloc( ) nigdy nie występuje, pozostawiając buf odinicjowany, lub
strcpy_s( )kopie "Hello, World" w losowej kawałek pamięci, ewentualnie awarii aplikacji lub że system przestanie odpowiadać, lub
free()próbę zwolnienia pamięci, która nie została przydzielona.
Aby prawidłowo używać ASSERT, przykładowy kod należy zmienić na następujące czynności:
enum {
sizeOfBuffer = 20
};
char *buf;
buf = (char *) calloc(sizeOfBuffer, sizeof(char) );
ASSERT( buf != NULL );
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );
Lub sprawdź można użyć zamiast tego:
enum {
sizeOfBuffer = 20
};
char *buf;
VERIFY(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );