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ê colocar o código importantes em uma instrução ASSERT para verificar que ele seja executado corretamente. Porque instruções ASSERT são comentadas na versão de compilação de um programa do MFC, o código não é executado em uma compilação de lançamento.
Se você estiver usando o ASSERT para confirmar que uma chamada de função bem-sucedida, considere o uso de VERIFY em vez disso. A macro verificar 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 teste 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 ocorre, deixando buf não inicializado, ou
strcpy_s( )copies "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 );