Condividi tramite


C28197

Warning C28197: probabile perdita di memoria

Questo avviso viene visualizzato sia per perdite di risorse che di memoria quando la risorsa potenzialmente crea un suo alias in un'altra posizione.

Il puntatore punta alla memoria allocata o a un'altra risorsa allocata non esplicitamente liberata.Questo avviso è in genere causato da annotazioni insufficienti per la funzione chiamata, sebbene delle annotazioni insufficienti nella funzione chiamante lo rendano più probabile.

Questo avviso può essere visualizzato all'uscita da una funzione, se un argomento di input ha un'annotazione __drv_aliasesMem o __drv_freesMem.Questo avviso generalmente indica o una perdita valida o che una funzione chiamata dalla funzione corrente necessiti di annotazioni aggiuntive.

In particolare, l'assenza delle annotazioni di base _In_ e _Out_ rendono la comparsa dell'avviso piuttosto probabile sebbene anche le annotazioni __drv_freesMem e __drv_aliasesMem potrebbero rendersi necessarie.Un falso positivo è probabilmente causato da un'annotazione _In_ mancante.

Le funzioni che accettano un puntatore e ne creano un alias (così da evitarne la perdita) devono essere annotate con __drv_aliasesMem.Se si crea una funzione che inserisce un oggetto in una struttura globale, o lo passa a una funzione di sistema che esegue tale operazione, è necessario aggiungere l'annotazione __drv_aliasesMem.

Le funzioni che liberano la memoria dovrebbero essere annotate con __drv_freesMem.Le funzioni principali che liberano memoria dispongono già di tale annotazione.

Esempio

Il seguente codice di esempio genera questo warning:

char *p = (char *)malloc(10);
test(p);   // does not save a copy of p

L'esempio di codice seguente evita questo avviso:

char *p = (char *)malloc(10);
test(p);   // does not save a copy of p
free(p);