C6308
avviso C6308: 'realloc' può restituire un puntatore a null: l'assegnazione di un puntatore a null a <variabile>, che viene passato come argomento a 'realloc', provocherà la perdita del blocco di memoria originale
Questo avviso indica che una perdita di memoria è il risultato dell'utilizzo non corretto di una funzione di riallocazione.Se la riallocazione non riesce, le funzioni di riallocazione per l'heap non liberano il buffer passato.Per risolvere il problema, assegnare il risultato della funzione di riallocazione a una memoria temporanea, quindi sostituire il puntatore originale dopo la riuscita della riallocazione.
Esempio
Il seguente codice di esempio genera questo avviso:
#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);
}
}
Per risolvere il problema, utilizzare il codice seguente:
#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);
}
}
L'avviso potrebbe generare disturbo in presenza di un alias attivo al buffer da riallocare al momento dell'assegnazione del risultato della funzione di riallocazione.