Condividi tramite


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_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;
}