경고 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_ptr
및 vector
. 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기