C6279
Предупреждение C6279: <переменная> выделяется скалярной операцией new, удаляется операцией массива delete [].
Это предупреждение возникает только в коде C++ и означает, что вызывающая функция несогласованно выделила память с помощью скалярного оператора new, но высвободила ее с помощью оператора массива delete []. Если память выделяется с помощью скалярного оператора new, ее следует высвобождать с помощью скалярного оператора delete.
Существует по крайней мере три причины возникновения неполадок из-за этого.
Конструкторы индивидуальных объектов в массиве не вызываются, тогда как деструкторы вызываются.
Если глобальный (или относящийся к определенному классу) оператор new и оператор delete несовместимы с оператором new[] и оператором delete[], могут возникнуть непредвиденные результаты.
Последствия этой неполадки трудно спрогнозировать в точности. Может возникнуть непредвиденное повеление или сбои из-за использования неинициализированной памяти, поскольку конструкторы не вызываются. Также может возникнуть выделение памяти и сбои в случае переопределения операторов. В редких случаях несоответствие может не иметь последствий. Программа анализа в настоящее время не делает различий между этими случаями.
Пример
Данное предупреждение создается следующим кодом:
class A
{
// members
};
void f ( )
{
A *pA = new A;
//code ...
delete[] pA;
}
Для устранения этого предупреждения используйте следующий код:
void f( )
{
A *pA = new A;
//code ...
delete pA;
}