Динамическая память и 'new'
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 6 из 56.
До сих пор вы работали с указателями, которые указывают на переменные, уже созданные в вашей программе. Но что, если вам нужно создавать переменные во время выполнения программы? Именно здесь динамическое распределение памяти с помощью ключевого слова new становится необходимым.
Ключевое слово new позволяет выделять память для переменной в куче во время выполнения программы. В отличие от обычных переменных, которые создаются в стеке, динамически выделенная память сохраняется до тех пор, пока вы явно не освободите её.
int* ptr = new int; // Выделяет память для целого числа
*ptr = 42; // Присваивает значение выделенной памятиВ этом примере new int выделяет достаточно памяти для хранения целого числа и возвращает указатель на эту область памяти. Затем вы можете использовать оператор разыменования для присвоения значений и доступа к динамически выделенной переменной точно так же, как и к любому другому указателю.
Динамическое выделение памяти особенно полезно, когда вы не знаете, сколько памяти вам понадобится до момента выполнения программы, или когда вам нужно, чтобы переменные существовали за пределами области видимости, в которой они были созданы. Эта гибкость делает new мощным инструментом для создания более сложных программ.
Задание
ЛегкоСоздайте программу, которая демонстрирует динамическое выделение памяти с использованием ключевого слова new для выделения памяти под переменную во время выполнения программы.
Будут предоставлены следующие входные данные:
- Целое число для хранения в динамически выделенной памяти
Ваша программа должна:
- Использовать ключевое слово
newдля динамического выделения памяти под целое число - Сохранить указатель, возвращенный
new, в переменную-указатель с именемnumPtr - Использовать оператор разыменования для присвоения входного значения динамически выделенной памяти
- Вывести значение, хранящееся в динамически выделенной памяти, путем разыменования указателя
- Вывести адрес памяти, хранящийся в указателе
Используйте следующий точный формат вывода:
Value: [value]
Address: [memory address]Адрес памяти будет отображаться в шестнадцатеричном формате — именно так C++ показывает адреса памяти для динамически выделенной памяти.
Шпаргалка
Ключевое слово new выделяет память для переменной в куче во время выполнения программы:
int* ptr = new int; // Выделяет память для целого числа
*ptr = 42; // Присваивает значение выделенной памятиВ отличие от обычных переменных, созданных в стеке, динамически выделенная память сохраняется до тех пор, пока она не будет явно освобождена, и может существовать за пределами области видимости, в которой она была создана.
Попробуйте сами
#include <iostream>
using namespace std;
int main() {
// Чтение входных данных
int value;
cin >> value;
// TODO: Напишите ваш код ниже
// Используйте 'new' для динамического выделения памяти для целого числа
// Сохраните указатель в переменной с именем 'numPtr'
// Присвойте входное значение динамически выделенной памяти
// Вывод результата
cout << "Value: " << /* разыменуйте numPtr здесь */ << endl;
cout << "Address: " << /* выведите адрес, хранящийся в numPtr */ << endl;
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров