C6242
更新 : 2007 年 11 月
警告 C6242: この try ブロックからのジャンプは、ローカル アンワインドを強制します。パフォーマンスがかなり低下します
この警告は、フォール スルー以外の方法によって、ジャンプ ステートメントにより制御フローが保護されている try-finally ブロックを離れることを示します。
最後のステートメントからフォール スルーする以外の方法で、保護されている try-finally ブロック を離れるには、ローカル アンワインドを実行する必要があります。一般的に、ローカル アンワインドには約 1000 個のマシン語命令が必要なため、パフォーマンスの低下を招きます。
保護されている try-finally ブロックを抜けるには、_leave を使用します。
使用例
この警告が発生するコード例を次に示します。
#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;
}