Динамические массивы позволяют создавать массивы, размер которых определяется во время выполнения программы, а не при компиляции. Это решает проблему статического размера массива, когда объявленная в начале программы длина может оказаться недостаточной или избыточной.
Динамическое выделение памяти
Рассмотрим динамическое выделение памяти для обычных переменных, что упростит понимание работы с динамическими массивами.
Создадим целочисленную переменную, используя ключевое слово new для динамического выделения памяти:
int* ptr = new int; // Выделение памяти под переменную типа int
*ptr = 7; // Присвоение значения переменной
Здесь ptr – указатель на выделенную ячейку памяти. Обращение к значению происходит через разыменование указателя (*ptr).
Для освобождения выделенной памяти используется ключевое слово delete:
delete ptr; // Освобождение памяти
Важно освобождать память после использования, чтобы избежать утечек памяти и повысить производительность программы. Без delete память будет зарезервирована до завершения программы.
Вывод значения на экран:
std::cout << *ptr << std::endl; // Вывод значения переменной
Динамические массивы в C++
Динамическое выделение памяти для массивов аналогично выделению памяти для отдельных переменных. Рассмотрим пример с массивом типа float:
float* arr = new float[500]; // Выделение памяти под массив из 500 элементов типа float
arr – указатель на начало выделенного блока памяти под массив. Размер массива (500 элементов) задается в квадратных скобках.
Освобождение памяти для массива:
delete[] arr; // Освобождение памяти, выделенной под массив (важно использовать delete[])
Обратите внимание на использование delete[], необходимое для корректного освобождения памяти, выделенной под массив.
Пример программы
Создадим программу, которая заполняет динамический массив случайными числами и выводит его содержимое на экран:
#include <iostream>
#include <cstdlib> // Для функции rand()
#include <ctime> // Для функции time()
int main() {
srand(time(0)); // Инициализация генератора случайных чисел
int n = 10;
float* arr = new float[n];
for (int i = 0; i < n; ++i) {
arr[i] = (float)(rand() % 80 + 1); // Заполнение массива случайными числами от 1 до 80
}
for (int i = 0; i < n; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
delete[] arr; // Освобождение памяти
return 0;
}
Этот код демонстрирует создание динамического массива из 10 элементов, заполнение его случайными числами от 1 до 80 и вывод на экран. После работы с массивом, память освобождается с помощью delete[].
Использование динамических массивов позволяет эффективно управлять памятью, адаптируя размер массива под конкретные потребности программы во время выполнения. Не забывайте всегда освобождать выделенную память с помощью delete для переменных и delete[] для массивов, чтобы избежать утечек памяти и ошибок в программе.