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

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

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

Замечания

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

Предупреждение C6283 применяется только к массивам примитивных типов, таких как целые числа или символы. Если элементы массива являются объектами типа класса, выводится предупреждение C6278 .

Использование new и delete имеет множество ошибок с точки зрения утечки памяти и исключений. Чтобы избежать таких потенциальных утечек, используйте механизмы, предоставляемые стандартной библиотекой C++ (STL). К ним относятся, например, unique_ptrи контейнеры, такие как.shared_ptrvector Дополнительные сведения см. в разделе "Смарт-указатели " и "Стандартная библиотека 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;
}