C6242
Обновлен: Ноябрь 2007
C6242
Предупреждение C6242: выход за пределы данного блока try вызывает локальную очистку. При этом значительно снижается производительность.
Это предупреждение означает, что оператор jump вызывает выход потока управления за пределы защищенного блока try-finally образом, отличным от "проваливания".
При выходе за пределы защищенного блока try-finally образом, отличным от "проваливания" с последнего оператора требуется локальная очистка. Для локальной очистки требуется около 1000 машинных инструкций, что резко снижает производительность.
Используйте _leave для выхода из защищенного блока try-finally.
Пример
Это предупреждение создается следующим кодом:
#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;
}
Чтобы исправить это предупреждение, используйте __leave, как показано в следующем коде.
#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;
}