共用方式為


警告 C6242

跳出這個 try-block 會強制本機回溯。 造成嚴重效能損失

這個警告表示 jump 語句會讓控制流程離開受保護區塊 try-finally ,而不是由倒入。

備註

離開 的受保護區塊,而不是從最後一個 try-finally 語句中落入,需要進行本機回溯。 本機回溯通常需要大約 1000 部機器的指示,因此對效能不利。

使用 __leave 結束 try-finally 的受保護區塊。

程式碼分析名稱:LOCALUNWINDFORCED

範例

下列程式代碼會產生此警告:

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

在記憶體流失和例外狀況方面,使用 mallocfree 有許多陷阱。 若要完全避免這類洩漏和例外狀況問題,請使用 C++ 標準連結庫所提供的機制。 這些包括 shared_ptrunique_ptrvector。 如需詳細資訊,請參閱 智慧型指標C++標準連結庫

另請參閱

try-except 陳述式
try-finally 陳述式