C6011
Aviso C6011: Desreferenciando ponteiro NULL <nome>
Este aviso indica que um ponteiro nulo está tendo sua referência cancelada.Se o valor do ponteiro for inválido, o resultado será indefinido.
Exemplo
O código a seguir gerencia este aviso, pois uma chamada para o malloc pode retornar um valor nulo se a memória disponível for insuficiente:
#include <malloc.h>
void f( )
{
char *p = ( char * ) malloc( 10 );
*p = '\0';
// code ...
free( p );
}
Para corrigir este aviso, examine o ponteiro para o valor nulo, conforme mostrado no código a seguir:
#include <malloc.h>
void f( )
{
char *p = ( char * )malloc ( 10 );
if ( p )
{
*p = '\0';
// code ...
free( p );
}
}
Você deve alocar memória dentro da função cujos parâmetros são detalhados usando a propriedade Nula em uma pré-condição antes de desreferenciar o parâmetro.O código a seguir gera o aviso C6011, pois é feita uma tentativa de desreferenciar um ponteiro nulo (pc) dentro da função sem antes alocar memória:
#include <sal.h>
using namespace vc_attributes;
void f([Pre(Null=Yes)] char* pc)
{
*pc='\0'; // warning C6011 - pc is null
// code ...
}
O uso de malloc e free tem muitas 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++.
Consulte também
Referência
Conceitos
Operadores de indireção e endereço de