Avviso C6308
'realloc' può restituire un puntatore Null: l'assegnazione di un puntatore Null a 'parameter-name', che viene passato come argomento a 'realloc', causerà la perdita del blocco di memoria originale
Osservazioni:
Le funzioni di riallocazione heap non liberano il buffer passato se la riallocazione non riesce, causando potenzialmente una perdita di memoria se non viene gestita correttamente. Per correggere il problema, assegnare il risultato della funzione di riallocazione a una variabile temporanea e quindi sostituire il puntatore originale dopo la corretta riallocazione.
Nome dell'analisi del codice: REALLOCLEAK
Esempio
Il codice di esempio seguente genera l'avviso C6308. Questo problema deriva dall'assegnazione del valore restituito da realloc
a x
. Se realloc
ha esito negativo e restituisce un puntatore Null, la memoria originale a x
cui punta non verrà liberata:
#include <malloc.h>
#include <windows.h>
void f( )
{
char *x = (char *) malloc(10);
if (x != NULL)
{
x = (char *) realloc(x, 512);
// code...
free(x);
}
}
Per risolvere il problema, è possibile creare una variabile temporanea per archiviare il valore restituito di realloc
. Questa modifica consente di liberare la memoria allocata in precedenza in modo sicuro in caso realloc
di errore:
#include <malloc.h>
#include <windows.h>
void f()
{
char *x = (char *) malloc(10);
if (x != NULL)
{
char *tmp = (char *) realloc(x,512);
if (tmp != NULL)
{
x = tmp;
}
// code...
free(x);
}
}
Questo avviso potrebbe generare rumore se è presente un alias attivo per il buffer da riallocare al momento dell'assegnazione del risultato della funzione di riallocazione.
Per evitare completamente questi tipi di problemi, usare i meccanismi forniti dalla libreria standard C++ (STL). Sono inclusi shared_ptr
i contenitori , e , unique_ptr
ad esempio vector
. Per altre informazioni, vedere Puntatori intelligenti e libreria standard C++.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per