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;
}

راجع أيضًا:

المرجع

try-finally Statement