Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 HRESULT
test 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 HRESULT
değ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ığı.