Menu
Coddy logo textTech

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

Часть раздела Logic & Flow путешествия по C на Coddy — урок 32 из 63.

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

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

#include <stdlib.h>

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

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

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

challenge icon

Задание

Легко

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

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

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

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

Stored value: 7
Squared value: 49

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

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

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

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

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

Все уроки раздела Logic & Flow