Compartilhar via


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

Consulte também

Referência

try-finally Statement