Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Suponha que quando você executa a versão de depuração do seu aplicativo MFC, não há problemas. No entanto, a versão de lançamento do mesmo aplicativo falha, retorna resultados incorretos e/ou exibe algum outro comportamento anormal.
Esse problema pode ser causado quando você coloca código importante em uma instrução ASSERT para verificar se ele funciona corretamente. Como as instruções ASSERT são comentadas em uma compilação de versão de um programa MFC, o código não é executado em uma compilação de versão.
Se você estiver usando ASSERT para confirmar que uma chamada de função foi bem-sucedida, considere usar VERIFY em vez disso. A macro VERIFY avalia seus próprios argumentos nas compilações de depuração e release do aplicativo.
Outra técnica preferida é 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 seguinte fragmento de código:
enum {
sizeOfBuffer = 20
};
char *buf;
ASSERT(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );
Este código é executado perfeitamente em uma versão de depuração de um aplicativo MFC. Se a chamada para calloc( ) falhar, será exibida uma mensagem de diagnóstico que inclui o número do arquivo e da linha. No entanto, numa versão de retalho de uma aplicação MFC:
a chamada para
calloc( )nunca ocorre, deixandobufnão inicializado, oustrcpy_s( )copia "Hello, World" em um pedaço aleatório de memória, possivelmente travando o aplicativo ou fazendo com que o sistema pare de responder, oufree()tentativas de libertar memória que nunca foi alocada.
Para usar ASSERT corretamente, o exemplo de código 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, em vez disso, você pode usar VERIFY em vez disso:
enum {
sizeOfBuffer = 20
};
char *buf;
VERIFY(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );