경고 C6226
의미상 서로 다른 정수 형식 간에 암시적 캐스트: HRESULT에 -1 할당 대신 E_FAIL 사용하는 것이 좋습니다.
이 경고는 명시적 값 -1로 할당되거나 초기화되었음을 나타냅니다 HRESULT
.
설명
이 경고는 정수 및 HRESULT
형식이 실수로 혼동되어 자주 발생합니다. 성공을 나타내려면 기호 상수 S_OK
대신 사용합니다. 실패를 나타내려면 E_로 시작하는 기호 상수(예: E_FAIL
.)를 사용합니다.
자세한 내용은 매크로 및 FAILED
매크로를 SUCCEEDED
참조하세요.
코드 분석 이름: ASSIGNING_MINUS_ONE_TO_HRESULT
예시
다음 코드는 이 경고를 생성합니다.
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = -1;
// code ...
}
else
{
// code ...
}
}
이 경고를 수정하려면 다음 코드를 사용합니다.
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = E_FAIL;
// code ...
}
else
{
// code ...
}
}
이 경고의 경우 형식은 SCODE
.로 HRESULT
처리됩니다.
malloc
사용 및 free
(및 관련 동적 메모리 API)에는 메모리 누수 및 예외의 원인으로 많은 함정이 있습니다. 이러한 종류의 누수 및 예외 문제를 방지하려면 C++ 표준 라이브러리에서 제공하는 포인터 및 컨테이너 클래스를 사용합니다. 여기에는 shared_ptr, unique_ptr 및 벡터가 포함되며, 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기