C6242

警告 C6242: 跳出此 try 區塊會強制區域回溯, 而對效能帶來嚴重的負面影響

這則警告表示跳躍陳述式 (Jump Statement) 會造成控制流程離開 try-finally 的保護區塊,而不是利用 fall-through。

離開 try-finally 的保護區塊 (而不是利用 fall-through) 需強制發生區域回溯。 區域回溯通常需要大約 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;
}

請參閱

參考

try finally 陳述式