Partager via


C6308

avertissement C6308 : 'realloc' peut retourner un pointeur Null : l'assignation d'un pointeur Null à <variable> passé comme argument à 'realloc' peut entraîner une fuite du bloc de mémoire d'origine

Cet avertissement indique une fuite de mémoire qui est le résultat de l'utilisation incorrecte d'une fonction de réallocation.Les fonctions de la réallocation de tas ne libèrent pas la mémoire tampon passée si la réallocation échoue.Pour corriger cette erreur, assignez le résultat de la fonction de réallocation à un temporaire, puis remplacez le pointeur d'origine après la réallocation réussie.

Exemple

L'exemple de code suivant génère cet avertissement :

#include <malloc.h>
#include <windows.h>

void f( )
{
  char *x;
  x = (char *) malloc(10);
  if (x != NULL)
  {
    x = (char *) realloc(x, 512);
    // code...
    free(x);
  }   
}

Pour corriger cet avertissement, utilisez le code suivant :

#include <malloc.h>
#include <windows.h>

void f()
{
  char *x, *tmp;

  x = (char *) malloc(10);

  if (x != NULL)
  {
    tmp = (char *) realloc(x,512);
    if (tmp != NULL) 
    {
      x = tmp;
    }
    free(x);
  }
}

Cet avertissement peut générer du bruit s'il existe un alias dynamique de la mémoire tampon à réallouer au moment de l'assignation du résultat de la fonction de réallocation.

Pour éviter entièrement ce genre de problème, 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

C6014