MiddleДебаггингЧастоЕщё не отвечали
Что не так с delete arr после new int[100]?
Это выделение и освобождение выглядят парными, но в программе скрытая ошибка.
int* arr = new int[100];
// ... используем arr ...
delete arr; // освобождаем здесь
Найдите и исправьте ошибку.
Неопределённое поведение: память из new[] нужно освобождать через delete[], а не delete. Их несоответствие — UB, обычно утечка или повреждение кучи. Решение: написать delete[] arr или отказаться от сырых массивов в пользу std::vector<int> или std::make_unique<int[]>(100).
- ✗Считать
deleteиdelete[]взаимозаменяемыми - ✗Думать, что несоответствие важно только для типов с деструкторами
- ✗Ожидать, что компилятор поймает это несоответствие
- →Почему
delete[]нужно знать число элементов, аdelete— нет? - →Как
std::make_unique<int[]>(n)полностью устраняет этот риск?