Share via


C6308

Mise à jour : novembre 2007

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.