Condividi tramite


C6242

Aggiornamento: novembre 2007

C6242

avviso C6242: Un salto da questo blocco try impone la rimozione locale con gravi conseguenze per le prestazioni

L'avviso indica che un'istruzione di salto ha causato l'uscita da un blocco protetto try-finally mediante modalità alternative al passaggio.

L'uscita da un blocco protetto try-finally mediante modalità alternative al passaggio dall'ultima istruzione richiede l'esecuzione di una rimozione locale, per la quale di solito sono necessarie circa 1000 istruzioni in linguaggio macchina; pertanto, è dannosa per le prestazioni.

Utilizzare _leave per uscire dal blocco protetto try-finally.

Esempio

Il codice seguente genera questo avviso:

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

Per risolvere il problema, utilizzare __leave come riportato nel codice seguente:

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

Vedere anche

Riferimenti

try-finally Statement