Aracılığıyla paylaş


Uyarı C6230

Sanal olarak farklı tamsayı türleri arasında örtük atama: Boole bağlamında HRESULT kullanma

Açıklamalar

Bu uyarı, deyimi gibi if boole sonucunun beklendiği bir bağlamda çıplak HRESULT bir değerin kullanıldığını gösterir. Bu test büyük olasılıkla yanlış sonuçlar verir. Örneğin, Boole olarak test edildiğinde (S_OK) için HRESULT tipik başarı değeri false olur.

Kod analizi adı: USING_HRESULT_IN_BOOLEAN_CONTEXT

Örnek

Aşağıdaki kod bu uyarıyı oluşturur:

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (hr)
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

Çoğu durumda, değerini HRESULTtest etmek için BAŞARILI veya BAŞARISIZ makro kullanılmalıdır. Bu uyarıyı düzeltmek için aşağıdaki kodu kullanın:

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (SUCCEEDED(hr))
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

Bu uyarı için SCODE türü olarak HRESULTdeğerlendirilir.

ve free (ve ilgili dinamik bellek API'leri) kullanımımalloc, bellek sızıntılarının ve özel durumlarının bir nedeni olarak birçok tuzak içerir. Bu tür sızıntıları ve özel durum sorunlarını önlemek için C++ Standart Kitaplığı tarafından sağlanan işaretçi ve kapsayıcı sınıflarını kullanın. Bunlar shared_ptr, unique_ptr ve vektör içerir. Daha fazla bilgi için bkz . Akıllı İşaretçiler ve C++ Standart Kitaplığı.