Compartir a través de


C6011

Advertencia C6011: Desreferenciando el puntero NULL <nombre>

Esta advertencia indica que se desreferencia un puntero NULL.Si el valor de puntero no es válido, el resultado es indefinido.

Ejemplo

El código siguiente genera esta advertencia porque una llamada a malloc podría devolver null si la memoria disponible no es suficiente:

#include <malloc.h>

void f( )
{ 
  char *p = ( char * ) malloc( 10 );
  *p = '\0';
  
  // code ...
 free( p );
}

Para corregir esta advertencia, examine el puntero para el valor nulo como se muestra en el código siguiente:

#include <malloc.h>
void f( )
{
  char *p = ( char * )malloc ( 10 );
  if ( p ) 
  {
    *p = '\0';
    // code ...
    
    free( p );
  }
}

Debe asignar la memoria dentro de la función cuyos parámetros se anotan utilizando la propiedad Null en una condición Pre antes de desreferenciar el parámetro.El código siguiente genera la advertencia C6011 porque se intenta desreferenciar un puntero NULL (pc) dentro de la función sin asignar la memoria antes:

#include <sal.h>
using namespace vc_attributes;
void f([Pre(Null=Yes)] char* pc)
{
  *pc='\0'; // warning C6011 - pc is null
  // code ...
}

El uso de las opciones malloc y free tiene muchos riesgos en cuanto a pérdidas de memoria y excepciones.Para evitar todos estos tipos de problemas de pérdidas de memoria y excepciones, use los mecanismos proporcionados por la Biblioteca de plantillas estándar (STL) de C++.Estos incluyen shared_ptr, unique_ptr y vector.Para obtener más información, vea Punteros inteligentes (C++ moderno) y Referencia de biblioteca estándar de C++.

Vea también

Referencia

NULL (CRT)

malloc

free

Conceptos

Operadores de direccionamiento indirecto y address-of

Otros recursos

Información general sobre anotaciones

Null