C6279
upozornění C6279: <variable> se alokuje skalárem new, odstraňuje pomocí pole delete []
Toto upozornění se zobrazí pouze v kódu jazyka C++ a označuje, že volání funkce má nekonzistentně přidělenou paměť skalárním operátorem new, avšak uvolněno operátorem pole delete [].Pokud je paměť alokována skalárem new, měla by být obvykle uvolněna skalárem delete.
Existují nejméně tři důvody, kdy toto pravděpodobně způsobí problémy:
Nejsou vyvolány konstruktory pro jednotlivé objekty v poli, i když destruktory vyvolány jsou.
Pokud není globální (nebo specifický pro třídu) operátor new a operátor delete kompatibilní s operátorem new[] a operátorem delete[], mohou se vyskytnout neočekávané výsledky.
Přesné důsledky této vady jsou těžké odhadnutelné.Protože nejsou vyvolány konstruktory, může dojít k náhodnému chování nebo může dojít k chybě z důvodu použití neinicializované paměti.Nebo může dojít k přidělení paměti a selhání v situacích, kdy jsou operátory přepsány.Ve přidělenou případech nemusí být neshoda důležitá.Nástroj pro analýzu v současné době nerozlišuje mezi těmito situacemi.
Příklad
Následující kód generuje toto upozornění:
class A
{
// members
};
void f ( )
{
A *pA = new A;
//code ...
delete[] pA;
}
Pro opravu tohoto upozornění použijte následující kód:
void f( )
{
A *pA = new A;
//code ...
delete pA;
}