次の方法で共有


警告 C6220

意味的に異なる整数型間の暗黙的なキャスト: HRESULT と -1 の比較。 代わりに使用またはFAILEDマクロを使用SUCCEEDEDすることを検討してください

この警告は、明示的な -1 以外HRESULTの値 (整形式HRESULTではない) と比較されていることを示HRESULTします。

解説

(E_FAIL) のHRESULTエラーは -1 では表されません。 したがって、整数への HRESULT の暗黙的なキャストにより、不適切な値が生成されて、不正な結果が得られる可能性があります。

コード分析名: COMPARING_HRESULT_TO_MINUS_ONE

ほとんどの場合、警告 C6220 は、関数が誤って整数を返し、エラー値として -1 を使用するが、代わりに関数から .HRESULT この警告が発生するコード例を次に示します。

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (hr == -1)
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

またはFAILEDマクロを使用SUCCEEDEDして、.の値HRESULTをテストすることをお勧めします。 この警告を解決するには、次のコードを使用します。

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

この警告では、SCODE 型は HRESULT と等価です。

明示的な比較は、HRESULT など特定の E_FAIL 値をチェックする場合に適しています。 そうでない場合は SUCCEEDED マクロまたは FAILED マクロを使います。

詳細については、「マクロとFAILEDマクロ」を参照してくださいSUCCEEDED

(およびfree関連する動的メモリ割り当て API) の使用mallocには、メモリ リークと例外に関して多くの落とし穴があります。 このような潜在的なリークを完全に回避するには、C++ 標準ライブラリ (STL) によって提供されるメカニズムを使用します。 これらには、次unique_ptrのようなvectorコンテナーが含まれますshared_ptr。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。