Compartilhar via


C6226

aviso C6226: Conversão implícita entre tipos inteiros semanticamente diferentes: atribuindo o valor -1 a HRESULT.Considere utilizar E_FAIL no lugar.

Este aviso indica que um HRESULT está sendo atribuído ou inicializado com um valor de -1 explícito.Este aviso é frequentemente causado pela confusão acidental de inteiro e tipos HRESULT.Para indicar êxito, a constante simbólica S_OK deve ser usada.Para indicar a falha, as constantes simbólicas iniciando com E_constant devem ser usadas.

Para obter mais informações, consulte as macros APROVADAS e REPROVADAS.

Exemplo

O código a seguir gera este aviso:

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = -1;
    // code ...
  }
  else
  {
    // code ...
  }
}

Para corrigir esse aviso, use o seguinte código:

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = E_FAIL;
    // code ...
  }
  else
  {
    // code ...
  }
}

Para este aviso, o tipo SCODE é equivalente a HRESULT.

Observe que o uso de malloc e free (e APIs de alocação de memória dinâmica relacionadas) têm várias armadilhas em termos de vazamentos de memória e exceções.Para evitar esses tipos de vazamentos e problemas de exceção no geral, use os mecanismos que são fornecidos pela STL (Biblioteca de Modelos Padrão) do C++.Incluem shared_ptr, unique_ptr e vector.Para obter mais informações, consulte Ponteiros inteligentes (C++ moderno) e Referência da Biblioteca Padrão C++.