Avviso C6230
Cast implicito tra tipi integer semanticamente diversi: uso di HRESULT in un contesto booleano
Osservazioni:
Questo avviso indica che un bare HRESULT
viene usato in un contesto in cui è previsto un risultato booleano, ad esempio un'istruzione if
. È probabile che questo test restituisca risultati non corretti. Ad esempio, il valore di esito positivo tipico per HRESULT
(S_OK
) è false quando viene testato come valore booleano.
Nome dell'analisi del codice: USING_HRESULT_IN_BOOLEAN_CONTEXT
Esempio
Il codice seguente genera questo avviso:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (hr)
{
// code ...
}
else
{
// code ...
}
}
Nella maggior parte dei casi, la macro SUCC edizione Enterprise DED o FAILED deve essere usata per testare il valore di HRESULT
. Per correggere questo avviso, usare il codice seguente:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// code ...
}
else
{
// code ...
}
}
Per questo avviso, il SCODE
tipo viene considerato come .HRESULT
L'uso di malloc
e free
(e delle API di memoria dinamica correlate) ha molte insidie come causa di perdite di memoria ed eccezioni. Per evitare questi tipi di perdite ed eccezioni, usare le classi puntatore e contenitore fornite dalla libreria standard C++. Questi includono shared_ptr, unique_ptr e vettore. Per altre informazioni, vedere Puntatori intelligenti e libreria standard C++.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per