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.