Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
'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 .
Notifica
L'avvertimento C6283 è stato rimosso in Visual Studio 2026. Usare invece l'avviso più generico C26865 .
Osservazioni:
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 .
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_ptri contenitori , e , unique_ptrad 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 deletenon 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;
}