Вступить в клуб →
лёгкаявопросПамять и RAII

delete вместо delete[] для массива

uint8_t* buf = new uint8_t[n];
read_into(buf, n);
delete buf;                 // без квадратных скобок

Код собирается без предупреждений и на тестах не падает. Что с ним не так?

  • Ошибок нет: для типов без деструктора, таких как `uint8_t`, формы `delete` и `delete[]` равнозначны, и компилятор сам подставит нужную по типу выражения
  • Массив, созданный через `new[]`, обязан освобождаться через `delete[]`; несоответствие форм — неопределённое поведение
  • Освободится только первый байт массива, остальные `n - 1` байт останутся занятыми до завершения процесса
  • Код не соберётся: компилятор следит за тем, чтобы к памяти из `new[]` применяли только `delete[]`

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела