Menu
Coddy logo textTech

Динамическая память и 'new'

Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 6 из 56.

До сих пор вы работали с указателями, которые указывают на переменные, уже созданные в вашей программе. Но что, если вам нужно создавать переменные во время выполнения программы? Именно здесь динамическое распределение памяти с помощью ключевого слова new становится необходимым.

Ключевое слово new позволяет выделять память для переменной в куче во время выполнения программы. В отличие от обычных переменных, которые создаются в стеке, динамически выделенная память сохраняется до тех пор, пока вы явно не освободите её.

int* ptr = new int;  // Выделяет память для целого числа
*ptr = 42;           // Присваивает значение выделенной памяти

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

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

challenge icon

Задание

Легко

Создайте программу, которая демонстрирует динамическое выделение памяти с использованием ключевого слова new для выделения памяти под переменную во время выполнения программы.

Будут предоставлены следующие входные данные:

  • Целое число для хранения в динамически выделенной памяти

Ваша программа должна:

  1. Использовать ключевое слово new для динамического выделения памяти под целое число
  2. Сохранить указатель, возвращенный new, в переменную-указатель с именем numPtr
  3. Использовать оператор разыменования для присвоения входного значения динамически выделенной памяти
  4. Вывести значение, хранящееся в динамически выделенной памяти, путем разыменования указателя
  5. Вывести адрес памяти, хранящийся в указателе

Используйте следующий точный формат вывода:

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;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком