C6242

Mise à jour : novembre 2007

C6242

Avertissement C6242 : Un saut hors de ce bloc try provoque un déroulement local et entraîne de sérieuses pertes en termes de performances

Cet avertissement indique qu'une instruction de saut provoque la sortie du flux de contrôle du bloc protégé d'un try-finally autrement que par passage.

La sortie du bloc protégé d'un try-finally autrement que par le passage de la dernière instruction requiert un déroulement local. En général, le déroulement local nécessite environ 1000 instructions machine ; par conséquent, il nuit aux performances.

Utilisez _leave pour sortir du bloc protégé d'un try-finally.

Exemple

Le code suivant génère cet avertissement :

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

Pour corriger cet avertissement, utilisez __leave, comme indiqué dans le code suivant :

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

Voir aussi

Référence

try-finally Statement