Compartilhar via


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 );

Consulte também

Referência

Corrigindo problemas de compilação de versão