Menu
Coddy logo textTech

Динамическое выделение — malloc()

Часть раздела Логика и управление потоком путешествия по C на Coddy. Урок 32 из 63.

Теперь ты узнаешь о malloc() — основной функции для запроса memory из кучи во время выполнения программы. Функция malloc() означает «выделение memory» и позволяет динамически allocate memory, когда это необходимо, вместо объявления переменных фиксированного размера во время компиляции.

Функция malloc() принимает один аргумент: количество байт, которое вы хотите allocate. Она возвращает указатель void на выделенный блок memory или NULL, если allocate завершается неудачно. Поскольку она возвращает указатель void, вы можете напрямую присвоить его типизированному указателю; приведение типа в C необязательно (в отличие от C++, где оно требуется).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Выделить память для одного целого числа
// ptr теперь указывает на область памяти, которая может хранить целое число

Главное преимущество malloc() — гибкость: во время выполнения программы можно запросить именно тот объём памяти, который нужен, и эта память остаётся доступной, пока вы явно не освободите её. Это особенно полезно, когда вы не знаете, сколько памяти вам понадобится, пока программа не начнёт выполняться.

Помни, что нужно include <stdlib.h>, чтобы использовать malloc(); приведение возвращённого указателя типа void в C необязательно, поскольку он автоматически преобразуется в тип, которому ты его присваиваешь.

challenge icon

Задание

Легко

Напишите программу на C, демонстрирующую динамическое выделение memory с использованием malloc() для создания и работы с одним integer в куче. Ваша программа должна:

  1. Использовать malloc() для динамического выделения memory для одного integer
  2. Преобразовать возвращённый указатель void в указатель integer
  3. Считать значение integer из пользовательского input
  4. Сохранить значение input в динамически выделенной memory с использованием оператора разыменования
  5. Вывести stored value в формате: Stored value: [value]
  6. Вычислить и сохранить квадрат значения в той же области memory
  7. Вывести значение squared в формате: Squared value: [value]

Не забудьте включить заголовок <stdlib.h>, чтобы использовать malloc(). Ваша программа должна продемонстрировать базовый рабочий процесс динамического выделения memory: запрос memory из кучи, её использование для хранения и обработки данных, а также работу с выделенной memory посредством операций с указателями.

Например, если пользователь вводит 7, результатом вашей программы должен быть:

Stored value: 7
Squared value: 49

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

Попробуйте сами

#include <stdio.h>
#include <stdlib.h>

int main() {
    // Прочитать ввод
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Напишите ваш код ниже
    // 1. Используйте malloc() для выделения памяти под одно целое число
    // 2. Приведите возвращённый указатель к int*
    // 3. Сохраните введённое значение в выделенной памяти
    // 4. Выведите сохранённое значение
    // 5. Вычислите и сохраните квадрат в том же месте
    // 6. Print the squared value
    
    return 0;
}
quiz iconПроверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор C