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