C++ для начинающих: Динамические массивы

Динамические массивы позволяют создавать массивы, размер которых определяется во время выполнения программы, а не при компиляции. Это решает проблему статического размера массива, когда объявленная в начале программы длина может оказаться недостаточной или избыточной.

Динамическое выделение памяти

Рассмотрим динамическое выделение памяти для обычных переменных, что упростит понимание работы с динамическими массивами.

Создадим целочисленную переменную, используя ключевое слово 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[] для массивов, чтобы избежать утечек памяти и ошибок в программе.

Что будем искать? Например,программа