Avviso C6283
'variable-name' viene allocato con array new [], ma eliminato con l'eliminazione scalare
Questo avviso viene visualizzato solo nel codice C++ e indica che la funzione chiamante ha allocato in modo incoerente la memoria con l'operatore array new []
, ma lo ha liberato con l'operatore scalare delete
.
Osservazioni:
Questo difetto può causare perdite, danneggiamenti della memoria e, in situazioni in cui gli operatori sono stati sottoposti a override, arresti anomali. Se la memoria viene allocata con la matrice new []
, in genere deve essere liberata con la matrice delete[]
.
Avviso C6283 si applica solo a matrici di tipi primitivi, ad esempio numeri interi o caratteri. Se gli elementi della matrice sono oggetti di tipo classe, viene generato l'avviso C6278 .
L'uso di new
e delete
presenta molte insidie in termini di perdite di memoria ed eccezioni. Per evitare completamente questi tipi di potenziali perdite, 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++.
Nome dell'analisi del codice: PRIMITIVE_ARRAY_NEW_DELETE_MISMATCH
Esempio
Il codice seguente genera l'avviso C6283. str
viene allocato usando new ...[...]
ma viene liberato usando la funzione delete
non corrispondente :
void f( )
{
char *str = new char[50];
delete str;
}
Il codice seguente corregge questo avviso usando la funzione delete[]
corrispondente :
void f( )
{
char *str = new char[50];
delete[] str;
}
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