0Pricing
C Academy · Урок

Динамическое выделение памяти

Изучите функции malloc, calloc, realloc и free для динамического управления памятью

«Динамическое выделение памяти» — бесплатный урок C Academy на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C Academy содержит 3 уроков всего.

Динамическое выделение памяти

Динамическое выделение памяти

В C динамическое выделение памяти позволяет выделять память во время выполнения программы, а не на этапе компиляции.

В этом уроке Вы узнаете:

  • Как выделять память с помощью malloc, calloc и realloc.
  • Как освобождать выделенную память с помощью free.
  • Как избегать утечек памяти.
Динамическое выделение памяти — иллюстрация 1

Что такое динамическое выделение памяти?

Что такое динамическое выделение памяти?

Обычно память для переменных выделяется на этапе компиляции.

При динамическом выделении память выделяется во время выполнения программы с помощью специальных функций.

Это полезно для работы с массивами или структурами, размер которых неизвестен на этапе компиляции.

Выделение памяти с помощью malloc()

Выделение памяти с помощью malloc()

Функция malloc выделяет память, но не инициализирует её.

Синтаксис:

ptr = (int*) malloc(size * sizeof(int));

Она возвращает указатель на выделенную память или NULL, если выделить память не удалось.

Пример: использование malloc()

Пример: использование malloc()

Эта программа демонстрирует, как выделять память с помощью malloc.

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

int main() {
    int *ptr = (int*) malloc(5 * sizeof(int));
    if (ptr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        ptr[i] = i * 10;
        printf("%d ", ptr[i]);
    }
    free(ptr);
    return 0;
}

Выделение памяти с помощью calloc()

Выделение памяти с помощью calloc()

Функция calloc выделяет память и инициализирует её нулевыми значениями.

Синтаксис:

ptr = (int*) calloc(num_elements, sizeof(int));

Она возвращает указатель на выделенную память или NULL, если выделить память не удалось.

Пример: использование calloc()

Пример: использование calloc()

Эта программа демонстрирует, как выделять память с помощью calloc.

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

int main() {
    int *ptr = (int*) calloc(5, sizeof(int));
    if (ptr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        printf("%d ", ptr[i]); // All elements initialized to 0
    }
    free(ptr);
    return 0;
}

Изменение размера памяти с помощью realloc()

Изменение размера памяти с помощью realloc()

Функция realloc изменяет размер ранее выделенной памяти.

Синтаксис:

ptr = realloc(ptr, new_size * sizeof(int));

Она возвращает указатель на новый блок памяти.

Освобождение памяти с помощью free()

Освобождение памяти с помощью free()

Выделенную память следует освобождать с помощью free(), чтобы избежать утечек памяти.

Синтаксис:

free(ptr);

После освобождения памяти к указателю нельзя обращаться.

Итоги

Итоги

В этом уроке Вы узнали:

  • Как выделять память с помощью malloc и calloc.
  • Как изменять размер выделенной памяти с помощью realloc.
  • Как освобождать память с помощью free, чтобы предотвращать утечки памяти.

Далее мы рассмотрим массивы указателей и указатели на функции в C!

Динамическое выделение памяти — иллюстрация 10

Часто задаваемые вопросы

Урок «Динамическое выделение памяти» бесплатный?

Да — полный текст урока «Динамическое выделение памяти» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C Academy, подпишись на CoddyKit PRO. Курс C Academy содержит 3 уроков всего.

Чему я научусь в уроке «Динамическое выделение памяти»?

Изучите функции malloc, calloc, realloc и free для динамического управления памятью Ты практикуешь C Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C Academy?

Предыдущий опыт не требуется. C Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.

Сколько времени занимает урок «Динамическое выделение памяти»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C Academy?

Да. Каждый урок C Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Знакомство с указателями
  2. Динамическое выделение памяти
  3. Массивы указателей и указатели на функции
← Назад к C Academy