Avviso C6226
Cast implicito tra tipi integer semanticamente diversi: assegnazione di -1 a HRESULT. È consigliabile usare invece E_FAIL.
Questo avviso indica che un oggetto HRESULT
viene assegnato o inizializzato a un valore esplicito pari a -1.
Osservazioni:
Questo avviso è spesso causato da confusione accidentale di interi e HRESULT
tipi. Per indicare l'esito positivo, usare invece la costante S_OK
simbolica. Per indicare un errore, usare le costanti simboliche che iniziano con E_constant, ad esempio E_FAIL
.
Per altre informazioni, vedere le SUCCEEDED
macro e FAILED
.
Nome dell'analisi del codice: ASSIGNING_MINUS_ONE_TO_HRESULT
Esempio
Il codice seguente genera questo avviso:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = -1;
// code ...
}
else
{
// code ...
}
}
Per correggere questo avviso, usare il codice seguente:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = E_FAIL;
// 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