Aviso C6388
'argument' pode não ser 'value': isso não segue a especificação para a função 'function-name': Linhas: x, y
Comentários
Esse aviso indica que um valor inesperado está sendo usado no contexto especificado. Esse aviso normalmente é relatado para valores passados como argumentos para uma função que não o espera.
Nome da análise de código: INVALID_PARAM_VALUE_2
Exemplo
O código a seguir gera o aviso C6388 porque DoSomething
espera um valor nulo, mas um valor potencialmente não nulo pode ser passado:
// C6388_warning.cpp
#include <string.h>
#include <malloc.h>
#include <sal.h>
void DoSomething( _Pre_ _Null_ void* pReserved );
void f()
{
void* p = malloc( 10 );
DoSomething( p ); // Warning C6388
// code...
free(p);
}
Para corrigir esse aviso, use o seguinte código de exemplo:
// C6388_no_warning.cpp
#include <string.h>
#include <malloc.h>
#include <sal.h>
void DoSomething( _Pre_ _Null_ void* pReserved );
void f()
{
void* p = malloc( 10 );
if (!p)
{
DoSomething( p );
}
else
{
// code...
free(p);
}
}
O uso de malloc
e free
tem muitas armadilhas em termos de vazamentos de memória e exceções. Para evitar por completo esses tipos de problema envolvendo vazamentos e exceções, use os mecanismos fornecidos pela Biblioteca Padrão do C++ (STL). Isso inclui shared_ptr
, unique_ptr
, e contêineres como vector
. Para obter mais informações, confira Ponteiros inteligentes e Biblioteca Padrão do C++.