C6242
avertissement C6242 : Un saut hors de ce bloc try provoque un déroulement localet 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 le montre 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;
}