Examinando instruções ASSERT
Suponha que, quando você executa a versão de depuração do seu aplicativo MFC, não há nenhum problema.No entanto, a versão do mesmo aplicativo falha, retorna resultados incorretos e/ou apresenta outro comportamento anormal.
Esse problema pode ser causado quando você coloca o código importantes em uma instrução ASSERT para verificar que ele seja executado corretamente.Porque são comentadas instruções ASSERT em uma versão de compilação de um programa do MFC, o código não é executado em uma versão de compilação.
Se você estiver usando o ASSERT para confirmar se uma chamada de função foi bem-sucedida, considere o uso VERIFICAR em vez disso.A macro VERIFY avalia seus próprios argumentos em ambos os debug e release compilações do aplicativo.
Outro preferencial técnica é atribuir o valor de retorno da função a uma variável temporária e, em seguida, testar a variável em uma instrução ASSERT.
Examine o fragmento de código a seguir:
enum {
sizeOfBuffer = 20
};
char *buf;
ASSERT(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );
Esse código é executado perfeitamente em uma versão de depuração de um aplicativo MFC.Se a chamada para calloc( ) falhar, uma mensagem de diagnóstico que inclui o número de arquivo e linha aparece.No entanto, em uma compilação de varejo de um aplicativo MFC:
a chamada para calloc( ) nunca ocorrer, deixando buf não inicializado, ou
strcpy_s( )cópias "Hello, World" em um pedaço aleatório de memória, possivelmente, travando o aplicativo ou fazendo com que o sistema pare de responder, ou
free()tenta liberar memória que nunca foi alocada.
Para usar ASSERT corretamente, o código de exemplo deve ser alterado para o seguinte:
enum {
sizeOfBuffer = 20
};
char *buf;
buf = (char *) calloc(sizeOfBuffer, sizeof(char) );
ASSERT( buf != NULL );
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );
Ou, você pode usar em vez disso, verifique se:
enum {
sizeOfBuffer = 20
};
char *buf;
VERIFY(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );