Предупреждение C6279
Имя переменной выделяется скалярным новым, удаленным с удалением массива []
Это предупреждение отображается только в коде C++ и указывает, что вызывающая функция несогласованно выделяет память с скалярным new
оператором, но освобождает ее с помощью оператора массива delete[]
. Если память выделена скалярными new
, обычно она должна быть освобождена скалярными delete
.
Замечания
Точные последствия этого дефекта трудно предсказать. Это может привести к случайному поведению или сбою из-за использования неинициализированной памяти, так как конструкторы не вызываются. Кроме того, это может привести к выделению памяти и сбоям в ситуациях, когда операторы были переопределены. В настоящее время средство анализа не различает эти ситуации.
Чтобы избежать таких проблем с выделением, используйте механизмы, предоставляемые стандартной библиотекой C++ (STL). К ним относятся, например, unique_ptr
и контейнеры, такие как.shared_ptr
vector
Дополнительные сведения см. в разделе "Смарт-указатели " и "Стандартная библиотека 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;
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по