Avertissement C6242

Un saut de ce try-block force le déroulement local. Entraîne une pénalité sévère sur les performances

Cet avertissement indique qu’une instruction de saut entraîne le flux de contrôle à quitter le bloc protégé d’un autre qu’à l’aide d’une try-finally instruction de secours.

Notes

Le fait de laisser le bloc protégé d’un try-finally autre qu’en tombant à partir de la dernière instruction nécessite que le déroulement local se produise. Le déroulement local nécessite généralement environ 1 000 instructions de machine, ce qui nuit aux performances.

Permet __leave de quitter le bloc protégé d’une tentative.

Nom de l’analyse du code : LOCALUNWINDFORCED

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

L’utilisation et l’utilisation de nombreux pièges en termes de mallocfree fuites de mémoire et d’exceptions. Pour éviter ces types de fuites et de problèmes d’exception complètement, utilisez les mécanismes fournis par la bibliothèque C++ Standard. Il s’agit notamment de shared_ptr , unique_ptr et vector . Pour plus d’informations, consultez Les pointeurs intelligents et la bibliothèque standard C++.

Voir aussi

instruction try-except
instruction try-finally