Condividi tramite


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_ptri contenitori , e , unique_ptrad 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