Поделиться через


C6283

Предупреждение C6283: Память для <переменная> выделена при помощи оператора new [] для массивов, а удаляется скалярным оператором delete

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

Пример

Данное предупреждение создается в следующем коде:

void f( )
{
  char *str = new char[50];
  // code ...
  delete str;
}

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

void f( )
{
  char *str = new char[50];
  // code ...
  delete[] str;
}

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

Использование new и delete имеет много опасностей в терминах утечки памяти и исключений.Чтобы избежать все такие проблемы утечек и исключений, используйте механизмы, предоставляемые библиотекой стандартных шаблонов (STL) C++.Они включают shared_ptr, unique_ptr и vector.Дополнительные сведения см. в разделах Интеллектуальные указатели (современный C++) и Справочник по стандартной библиотеке C++.