다음을 통해 공유


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

참고 항목

참조

try-finally Statement