Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Impliciete cast tussen semantisch verschillende gehele getallen: HRESULT vergelijken met -1. Overweeg in plaats daarvan om de macro
SUCCEEDEDof de macroFAILEDte gebruiken.
Opmerkingen
Deze waarschuwing geeft aan dat een HRESULT wordt vergeleken met een expliciete, niet-HRESULT waarde van -1, wat geen goed gevormde HRESULT is.
Een fout in HRESULT (E_FAIL) wordt niet vertegenwoordigd door een -1. Daarom genereert een impliciete cast van een HRESULT naar een geheel getal een onjuiste waarde en leidt dit waarschijnlijk tot het verkeerde resultaat.
Naam van codeanalyse: COMPARING_HRESULT_TO_MINUS_ONE
Example
In de meeste gevallen wordt waarschuwing C6220 veroorzaakt door code die per ongeluk verwacht dat een functie een geheel getal retourneert en -1 als een foutwaarde gebruikt, maar in plaats daarvan retourneert de functie een HRESULT. In het volgende codevoorbeeld wordt deze waarschuwing gegenereerd:
#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;
}
}
Het beste is om de SUCCEEDED of FAILED macro te gebruiken om de waarde van een HRESULT te testen. Gebruik de volgende code om deze waarschuwing te corrigeren:
#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;
}
}
Voor deze waarschuwing is het SCODE type gelijk aan HRESULT.
Expliciete vergelijking is geschikt om te controleren op specifieke HRESULT waarden, zoals E_FAIL. Gebruik anders de SUCCEEDED of FAILED macro's.
Zie SUCCEEDED Macro en FAILED Macro voor meer informatie.
Het gebruik van malloc en free (en gerelateerde API's voor dynamische geheugentoewijzing) heeft veel valkuilen in termen van geheugenlekken en uitzonderingen. Als u dergelijke mogelijke lekken helemaal wilt voorkomen, gebruikt u de mechanismen die worden geleverd door de C++ Standard Library (STL). Dit zijn onder andere shared_ptr, unique_ptren containers zoals vector. Zie Smart Pointers en C++ Standard Library voor meer informatie.