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 malloc
free
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++.