다음을 통해 공유


경고 C6242

이 시도 블록에서 점프하면 로컬의 긴장을 풀 수 있습니다. 심각한 성능 저하 발생

이 경고는 점프 문으로 인해 제어 흐름이 대체(fall-through)가 아닌 다른 보호된 블록을 남게 됨을 try-finally 나타냅니다.

설명

마지막 문에서 넘어지는 것 이외의 보호된 블록을 try-finally 그대로 두려면 로컬 해제가 필요합니다. 로컬 해제에는 일반적으로 약 1,000개의 컴퓨터 지침이 필요하므로 성능에 해가 됩니다.

try-finally의 보호된 블록을 종료하는 데 사용합니다 __leave .

코드 분석 이름: LOCALUNWINDFORCED

예시

다음 코드는 이 경고를 생성합니다.

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

메모리 누수 및 free 예외 측면에서 많은 문제를 사용하고 malloc 있습니다. 이러한 종류의 누출 및 예외 문제를 완전히 방지하려면 C++ 표준 라이브러리에서 제공하는 메커니즘을 사용합니다. 포함 shared_ptr, unique_ptrvector. 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.

참고 항목

try-except statement
try-finally statement