Condividi tramite


C6308

Aggiornamento: novembre 2007

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 codice di esempio seguente 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.