Menu
Coddy logo textTech

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

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

Когда вы динамически выделяете memory с помощью malloc(), эта memory остаётся allocated, пока вы явно не освободите её. Функция free() — ваш инструмент для возврата динамически выделенной memory системе, когда вы закончите using её.

Функция free() принимает один аргумент: указатель на блок памяти, который вы хотите освободить. Это должен быть тот же указатель, который был возвращён функцией malloc() (или связанными с ней функциями, такими как calloc()).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Выделить память
*ptr = 42;  // Использовать память
free(ptr);  // Освободить память, когда закончено

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

Помни: каждому malloc() должен соответствовать free(). Это соответствие необходимо для ответственного управления memory в программировании на C.

challenge icon

Задание

Легко

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

  1. Считать у пользователя значение integer count, представляющее количество integer для хранения
  2. Использовать malloc() вместе с sizeof() для динамического выделения памяти под массив из count integer
  3. Проверить, was ли выделение памяти successful — если оно завершится ошибкой, вывести Memory allocation failed! и завершить программу
  4. Если выделение прошло успешно, вывести Memory allocated successfully!
  5. Считать у пользователя count значений типа integer и store их в выделенном массиве
  6. Calculate и вывести сумму всех values в формате: Sum: [value]
  7. Найти и вывести maximum value в формате: Maximum: [value]
  8. Использовать free() для освобождения памяти
  9. Вывести Memory freed successfully!, чтобы подтвердить очистку

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

Например, если входные данные имеют вид:

4
15 8 23 12

Вывод должен быть следующим:

Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!

Эта задача закрепляет critical concept: каждый динамически выделенный блок памяти должен быть proper freed, когда он больше не нужен, что завершает responsible memory management cycle в программировании на C.

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

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

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

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

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

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