Avviso C6279
'variable-name' viene allocato con il nuovo scalare, eliminato con l'eliminazione della matrice []
Questo avviso viene visualizzato solo nel codice C++ e indica che la funzione chiamante ha allocato in modo incoerente la memoria con l'operatore scalare new
, ma lo ha liberato con l'operatore array delete[]
. Se la memoria viene allocata con scalare new
, in genere deve essere liberata con scalare delete
.
Osservazioni:
Le esatte ramificazioni di questo difetto sono difficili da prevedere. Potrebbe causare comportamenti casuali o arresti anomali a causa dell'utilizzo della memoria non inizializzata perché i costruttori non vengono richiamati. In alternativa, potrebbe causare allocazioni di memoria e arresti anomali in situazioni in cui gli operatori sono stati sottoposti a override. Lo strumento di analisi attualmente non distingue tra queste situazioni.
Per evitare completamente questi tipi di problemi di allocazione, 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: NEW_ARRAY_DELETE_MISMATCH
Esempio
Il codice seguente genera l'avviso C6279. A
viene allocato usando new
ma eliminato usando delete[]
:
class A
{
// members
};
void f()
{
A *pA = new A;
//code ...
delete[] pA;
}
Il codice seguente evita questo avviso usando delete
invece:
class A
{
// members
};
void f()
{
A *pA = new A;
//code ...
delete pA;
}
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