Condividi tramite


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++.