Compartir a través de


C6242

Advertencia C6242: Un salto fuera de este bloque try fuerza el desenredo local, lo que produce una grave pérdida de rendimiento

Esta advertencia indica que una instrucción de salto hace que el flujo de control salga del bloque protegido de try-finally de otra manera que por paso explícito.

Cuando se sale del bloque protegido de try-finally de otra manera que pasando explícitamente desde la última instrucción, se requiere un desenredo local. Para el desenredo local se suelen necesitar, aproximadamente, 1000 instrucciones de código máquina; por consiguiente, afecta negativamente al rendimiento.

Utilice _leave para salir del bloque protegido de try-finally.

Ejemplo

El código siguiente genera esta advertencia:

#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 corregir esta advertencia, use __leave como se muestra en el código siguiente:

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

Vea también

Referencia

try-finally Statement