Предупреждение C6279

Имя переменной выделяется скалярным новым, удаленным с удалением массива []

Это предупреждение отображается только в коде C++ и указывает, что вызывающая функция несогласованно выделяет память с скалярным new оператором, но освобождает ее с помощью оператора массива delete[] . Если память выделена скалярными new, обычно она должна быть освобождена скалярными delete.

Замечания

Точные последствия этого дефекта трудно предсказать. Это может привести к случайному поведению или сбою из-за использования неинициализированной памяти, так как конструкторы не вызываются. Кроме того, это может привести к выделению памяти и сбоям в ситуациях, когда операторы были переопределены. В настоящее время средство анализа не различает эти ситуации.

Чтобы избежать таких проблем с выделением, используйте механизмы, предоставляемые стандартной библиотекой C++ (STL). К ним относятся, например, unique_ptrи контейнеры, такие как.shared_ptrvector Дополнительные сведения см. в разделе "Смарт-указатели " и "Стандартная библиотека C++".

Имя анализа кода: NEW_ARRAY_DELETE_MISMATCH

Пример

Следующий код создает предупреждение C6279. A выделяется с помощью new , но удаляется с помощью delete[]:

class A
{
  // members
};

void f()
{
   A *pA = new A;
   //code ...
   delete[] pA;
}

Следующий код избегает этого предупреждения, используя delete следующее:

class A
{
  // members
};

void f()
{
   A *pA = new A;
   //code ...
   delete pA;
}

См. также