C6242

警告 C6242:从此 try 块中跳转将强制展开局部堆栈。 这样会严重影响性能

此警告意味着跳转语句导致控制流退出受保护的 try-finally 块,而不是贯穿此块。

要退出受保护的 try-finally 块,而不是从上一个语句贯穿,需要展开局部堆栈。 展开局部堆栈通常需要大约 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 Statement