C6242
uyarı C6242: Bu deneme bloğunun dışına yapılan bir atlama yerel açılımı zorlar.Ciddi performans cezasına uğrar
Bu uyarı, atlama esktresi control-flow bloğunu bir try-finally dışında düşüşe-doğru bıraktığını neden gösterir.
Korumalı bloğu bir try-finally olarak bırakmak, son durumdaki falling-through'ya göre oluşmak için yerel rahatlığa ihtiyaç duyar.Yerel rahatlık, tipik olarak yaklaşık olarak 1000 makine yönergesine ihtiyaç duyar; bu nedenle, performansı düşürür.
Bu _leave korumalı bloğunu bir try-finally'den çıkmak için kullanın.
Örnek
Aşağıdaki kod bu uyarıyı üretir:
#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;
}
Bu uyarıyı düzeltmek için aşağıdaki kodda gösterildiği gibi __leave kullanın:
#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;
}