Aracılığıyla paylaş


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

Ayrıca bkz.

Başvuru

try finally ifadesi