Предупреждение C6283
"переменная-имя" выделяется с массивом новых [], но удаляется с скалярным удалением
Это предупреждение отображается только в коде C++ и указывает, что вызывающая функция несогласованно выделяет память с оператором массива new []
, но освобождает ее с скалярным delete
оператором.
Замечания
Этот дефект может привести к утечкам, повреждениям памяти и в ситуациях, когда операторы были переопределены, сбои. Если память выделена массивом new []
, обычно она должна быть освобождена с помощью массива delete[]
.
Предупреждение C6283 применяется только к массивам примитивных типов, таких как целые числа или символы. Если элементы массива являются объектами типа класса, выводится предупреждение C6278 .
Использование new
и delete
имеет множество ошибок с точки зрения утечки памяти и исключений. Чтобы избежать таких потенциальных утечек, используйте механизмы, предоставляемые стандартной библиотекой C++ (STL). К ним относятся, например, unique_ptr
и контейнеры, такие как.shared_ptr
vector
Дополнительные сведения см. в разделе "Смарт-указатели " и "Стандартная библиотека C++".
Имя анализа кода: PRIMITIVE_ARRAY_NEW_DELETE_MISMATCH
Пример
Следующий код создает предупреждение C6283. str
выделяется с использованием new ...[...]
, но освобождается с помощью несогласованной функции delete
:
void f( )
{
char *str = new char[50];
delete str;
}
Следующий код устраняет это предупреждение с помощью соответствующей функции delete[]
:
void f( )
{
char *str = new char[50];
delete[] str;
}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по