+ 1

Удаление динамического массива в C++

Например, я создаю динамический массив внутри функции и заполняю его числами. Нужно ли мне его удалять через (delete [] arr;), или он удалится сам после выхода за } ? (как я понял, все переменные, обьявленные в блоке { }, удаляются автоматически после выхода за скобку). Аналогично и в функции main(), нужно ли удалять массив до завершения программы или это не обязательно? (массив нужен до завершения программы и раньше его удалять не требуется) Пример кода: #include <iostream> void f(int n) { int* arr = new int[n]; for (int i = 0; i < n; i++) cin >> a[i]; // Ещё какой-то код // delete [] a; (нужно ли?) } int main() { int n; cin >> n; f(n); return 0; }

2nd Jul 2020, 5:34 PM
Maksim
Maksim - avatar
3 Answers
+ 1
Dynamic memory: https://www.sololearn.com/learn/CPlusPlus/1632/ Динамическая память (heap) не контролируется автоматически приложением по сравнению со статической (stack). Это обязанность пользователя, то есть разработчика. Память выделенное динамически нужно освободить эксплицитно, то есть в ручную! В противном случае это область ОЗУ остаётся заблокированной до завершения приложении. Когда приложение закрыта, операционная система будет разблокировать часть память с ОЗУ, которое данное программа имела зарезервированной для её выполнении. В некоторых случаях ОС может решить что данная часть памяти ещё использовано некоторым из процессов, даже если это не так. Так что строго рекомендуется освободить память зарезервированной динамически! Местные переменны автоматически удалены (уничтожены) после выхода из их блока где были созданы {...} (local scope).
2nd Jul 2020, 8:36 PM
Vasile Eftodii
Vasile Eftodii - avatar
+ 1
Thank you all! Спасибо большое!
3rd Jul 2020, 5:59 AM
Maksim
Maksim - avatar