C6242
경고 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;
}