Advertencia C6226
Conversión implícita entre tipos enteros semánticamente diferentes: asignar -1 a HRESULT. Considere utilizar E_FAIL en su lugar.
Esta advertencia indica que a HRESULT
se le asigna un valor explícito de -1 o se inicializa en este valor.
Comentarios
Esta advertencia se genera con frecuencia a causa de una confusión accidental de los tipos integer y HRESULT
. Para indicar que la operación es correcta, use la constante simbólica S_OK
en su lugar. Para indicar que la operación es incorrecta, use las constantes simbólicas que comienzan por E_constant, como E_FAIL
.
Para obtener más información, consulte las SUCCEEDED
macros y FAILED
.
Nombre del análisis de código: ASSIGNING_MINUS_ONE_TO_HRESULT
Ejemplo
El código siguiente genera esta advertencia:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = -1;
// code ...
}
else
{
// code ...
}
}
Para corregir esta advertencia, utilice el código siguiente:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = E_FAIL;
// code ...
}
else
{
// code ...
}
}
Para esta advertencia, el tipo SCODE
se trata como un valor HRESULT
.
El uso de malloc
y free
(y las API de memoria dinámica relacionadas) tiene muchos inconvenientes, por ejemplo, provoca fugas de memoria y excepciones. Para evitar estos problemas, use las clases de puntero y contenedor que se proporcionan en la Biblioteca estándar de C++. Incluyen shared_ptr, unique_ptr y vector. Para más información, consulte los artículos sobre punteros inteligentes y biblioteca estándar de C++.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de