C6279
Ostrzeżenie C6279: <variable> przydzielona z użyciem skalarnego operatora new, została usunięta z użyciem tablicowego operatora delete[]
Ostrzeżenie to pojawia się tylko w przypadku kodu C++ i wskazuje, że wywołująca funkcja niespójnie przydzieliła pamięć skalarnym operatorem new, ale zwolniła go tablicowym operatorem delete[].Jeśli pamięć została przydzielona skalarnym operatorem new, zazwyczaj powinna zostać zwolniona skalarnym operatorem delete.
Istnieją co najmniej trzy powody, dla których może to spowodować problemy:
Konstruktory dla poszczególnych obiektów w tablicy nie są wywoływane, chociaż destruktory są.
Globalne (lub swoiste dla klas) operatory operator new i operator delete nie są zgodne z operator new[] i operator delete[], prawdopodobnie wystąpią nieoczekiwane wyniki.
Dokładne konsekwencje tej wady są trudne do przewidzenia.Może spowodować losowe zachowanie lub awarie z powodu użycia niezainicjowanej pamięci, ponieważ konstruktory nie są wywoływane.Może także spowodować alokacje pamięci i awarie w sytuacjach, gdy operatory zostały zastąpione.W rzadkich przypadkach niezgodność może nie być istotna.Narzędzie analizy aktualnie nie rozróżnia tych sytuacji.
Przykład
Poniższy kod generuje to ostrzeżenie:
class A
{
// members
};
void f ( )
{
A *pA = new A;
//code ...
delete[] pA;
}
Aby poprawić to ostrzeżenie, należy użyć następującego kodu:
void f( )
{
A *pA = new A;
//code ...
delete pA;
}