C6242
Aviso C6242: Um salto desse bloco try-força o desenrolamento de local. Gera a penalidade de desempenho
Este aviso indica que uma instrução de salto faz com que o fluxo de controle deixar o bloco protegido de um try-finally diferente, por meio do outono.
Deixando o bloco protegido de um try-finally outros que saindo da última instrução requer local desenrolar para ocorrer. Normalmente, o desenrolamento de local requer aproximadamente 1000 instruções de máquina; Portanto, é prejudicial para o desempenho.
Use _leave para sair do bloco protegido de um try-finally.
Exemplo
O código a seguir gera este aviso:
#include <malloc.h>
void DoSomething(char *p); // function can throw exception
int f( )
{
char *ptr = 0;
__try
{
ptr = (char*) malloc(10);
if ( !ptr )
{
return 0; //Warning: 6242
}
DoSomething( ptr );
}
__finally
{
free( ptr );
}
return 1;
}
Para corrigir esse aviso, use __leave conforme mostrado no código a seguir:
#include <malloc.h>
void DoSomething(char *p);
int f()
{
char *ptr = 0;
int retVal = 0;
__try
{
ptr = (char *) malloc(10);
if ( !ptr )
{
retVal = 0;
__leave; //No warning
}
DoSomething( ptr );
retVal = 1;
}
__finally
{
free( ptr );
}
return retVal;
}