C6242
تحذير C6242: انتقال خارج حظر try هذا يفرض محلي unwind. إلى حدوث جزاء أداء هام
هذا التحذير يشير إلى أن كشف ارتباط يؤدي إلى تدفق عناصر التحكم لترك المحمية حظر حاول-أخيرا غير ذلك من قبل الخريف-through.
ترك المحمية حظر حاول-أخيرا غير ذلك unwind من قبل تقع من آخر يتطلب العبارة المحلية للحدوث. unwind المحلية عادة تتطلب حوالي 1000 تعليمات آلة؛ ولذلك، فإنه هو detrimental للأداء.
استخدام _leaveإلى إنهاء حظر محمية من حاول-أخيرا.
مثال
يلي تعليمات برمجية ينشئ هذا التحذير:
#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;
}