다음을 통해 공유


경고 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++ 표준 라이브러리를 참조하세요.