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