Динамически распределенный массив C++

11 лучших IDE для C++ (и редакторов кода) на 2022 год Программирование и разработка

Массивы — это очень важная структура данных в C ++, которая служит для хранения схожих типов элементов. Массивы в основном делятся на два разных типа: статические и динамические. Статические массивы — это те, размер которых предварительно определен в коде, тогда как динамические массивы — это те, размер которых определяется во время выполнения. В этой статье мы подробно поговорим о динамических массивах в C ++. Более того, мы уделим особое внимание их распределению и освобождению, поделившись с вами подробным примером в Ubuntu 20.04.

Динамически размещаемые массивы в C ++

Мы уже заявляли, что размер динамического массива определяется во время выполнения. Однако может возникнуть вопрос, зачем нам вообще нужны динамически выделяемые массивы, когда мы можем удобно использовать статические массивы? Что ж, иногда вы сталкиваетесь с такими ситуациями, когда размер массива изначально неизвестен. В этих случаях вы можете получить размер массива как ввод от пользователя во время выполнения.

Но это невозможно со статическими массивами, поскольку размер статического массива, однажды определенного в коде, не может быть изменен. Здесь в игру вступают динамически выделяемые массивы, которые могут определять массивы любого желаемого размера во время выполнения. Динамические массивы в C ++ можно легко создать с помощью ключевого слова «new». Точный синтаксис будет пояснен позже в этой статье.

Однако здесь следует отметить важный момент: статические массивы всегда создаются в стеке вашей системы, и ваша система сама берет на себя ответственность за освобождение своего стека после завершения вашей программы. С другой стороны, динамически выделяемые массивы всегда создаются в куче, и вам нужно вручную освобождать память, занимаемую динамическим массивом. Теперь вам нужно увидеть пример, обсуждаемый ниже, чтобы понять использование динамически выделяемых массивов.

Использование динамически размещаемых массивов в C ++ в Ubuntu 20.04

В этом примере мы хотим научить вас использовать динамически выделяемые массивы в C ++. Мы расскажем, как можно объявить и инициализировать динамический массив во время выполнения. Затем мы отобразим элементы динамически выделяемого массива. Наконец, мы покажем вам, как можно освободить память, занимаемую динамическим массивом в C ++. Чтобы узнать все это, вам нужно будет увидеть код, показанный на следующем изображении:

Читайте также:  Data Science Simplified: 5 основных задач NLP, в которых используется Hugging Face

В этой программе на C ++ у нас есть функция main ()

В этой программе на C ++ у нас есть функция main (), в которой мы определили целое число num. Это целое число будет соответствовать размеру нашего динамического массива, который мы создадим позже. Затем мы отобразили на терминале сообщение, предлагающее пользователю ввести любой размер по своему выбору для динамического массива. После этого мы взяли этот размер в качестве ввода от пользователя. Затем с помощью оператора «int * array = new int (num)» мы объявили динамический массив во время выполнения, размер которого равен переменной «num». «Массив» относится к имени этого массива.

После этого мы снова отобразили на терминале сообщение, предлагающее пользователю ввести элементы этого массива. За этим сообщением следует цикл for, который повторяется до размера массива, т.е. num. В этом цикле мы взяли элементы этого динамического массива в качестве входных данных от пользователя.

После того, как динамический массив был заполнен, мы хотели отобразить его элементы на терминале, для которого мы сначала отобразили сообщение с помощью оператора «cout». Затем у нас есть еще один цикл for, который снова перебирает размер динамического массива. В этом цикле мы просто отобразили элементы массива на терминале. После этого мы хотели освободить память, занятую этим динамическим массивом, для которого мы использовали оператор «delete [] array». Наконец, на всякий случай мы использовали оператор «array = NULL», чтобы также удалить ссылку NULL динамического массива, память которого мы только что освободили.

После написания этого кода, когда мы его скомпилировали и выполнили, нас сначала попросили ввести размер динамического массива. Мы хотели, чтобы наш динамический массив имел размер «5», как показано на изображении ниже:

После написания этого кода, когда мы его скомпилировали и выполнили

Как только мы ввели размер нашего динамического массива, нас попросили заполнить его. Для этого мы ввели числа от 1 до 5, как показано на следующем изображении:

Как только мы ввели размер нашего динамического массива

Как только мы нажали клавишу Enter после заполнения нашего динамического массива, его элементы были напечатаны на терминале. Кроме того, также произошло освобождение динамической памяти, из-за чего уведомление об этом также появилось на терминале, как показано на изображении ниже:

Читайте также:  Структуры в C

Теперь мы немного подправим тот же код

Теперь мы немного подправим тот же код. До сих пор мы узнали, как можно инициализировать динамический массив в C ++ и отображать его элементы на терминале. Хотя мы также включили в нашу программу код для освобождения этой памяти, тем не менее, мы все еще не уверены, была ли освобождена занятая динамическая память успешно или нет. Для этого мы попытаемся получить доступ к части этой динамической памяти после ее освобождения. Если доступ к нему осуществлен успешно, это будет означать, что освобождение памяти не произошло правильно.

Однако, если мы встретим какое-либо сообщение об ошибке при доступе к этой памяти после ее освобождения, это будет означать, что наша занятая динамическая память теперь успешно освобождена. Чтобы понять это, вам нужно взглянуть на следующий модифицированный код:

В этом модифицированном коде C ++ мы просто добавили строку

В этом модифицированном коде C ++ мы просто добавили строку в конец нашей программы, то есть cout << array [2]. Это означает, что мы хотим получить доступ к третьему индексу нашего динамического массива после освобождения занимаемой им памяти.

Когда мы скомпилировали и выполнили этот код, он работал отлично, однако, как только эта последняя строка была выполнена, была сгенерирована ошибка, относящаяся к ошибке сегментации, что на самом деле означает, что вы пытаетесь получить доступ к области памяти, которая больше не существует.. Это показано на прикрепленном изображении.

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

Это означает, что такой код всегда будет успешно компилироваться

Заключение

Эта статья была нацелена на то, чтобы научить вас использовать динамически выделяемые массивы в C ++ в Ubuntu 20.04. Для этого мы сначала подчеркнули необходимость использования динамически выделяемых массивов в C ++. Затем мы рассмотрели подробный пример, объясняющий, как создавать динамические массивы и работать с ними в C ++. Более того, мы также поделились методом освобождения динамических массивов. Изучив это руководство, вы обязательно получите базовое представление о работе с динамическими массивами в C ++.

Оцените статью
bestprogrammer.ru
Добавить комментарий