Partager via


C6011

avertissement C6011 : suppression de la référence du pointeur NULL <nom>

Cet avertissement indique que la référence d'un pointeur null est en cours de suppression.Si la valeur du pointeur n'est pas valide, le résultat n'est pas défini.

Exemple

Le code suivant génère cet avertissement car un appel à malloc peut retourner null si la mémoire disponible est insuffisante :

#include <malloc.h>

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

Pour corriger cet avertissement, examinez le pointeur de la valeur null, comme indiqué dans le code suivant :

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

Vous devez allouer de la mémoire dans la fonction où les paramètres sont annotés à l'aide de la propriété Null d'une condition Pre avant de supprimer la référence au paramètre.Le code suivant génère l'avertissement C6011 car une tentative est effectuée pour supprimer la référence à un pointeur null (pc) dans la fonction sans allouer au préalable de la mémoire :

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

L'utilisation de malloc et free présente de nombreux pièges en terme de fuites de mémoire et d'exceptions.Pour éviter complètement ce genre de problème de fuites et d'exception, utilisez les mécanismes fournis par la bibliothèque de modèles standard (STL) C++.Ceux-ci incluent shared_ptr, unique_ptr, et vector.Pour plus d’informations, consultez Pointeurs intelligents (Modern C++) et Référence de bibliothèque standard C++.

Voir aussi

Référence

NULL (CRT)

malloc

libre

Concepts

Indirection et opérateurs d'adresse

Autres ressources

Vue d'ensemble de l'annotation

Null