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