Это необходимо, потому что C не имеет сборщика мусора.Когда вы выделяете память с помощью malloc
или аналогичной функции, она помечается как «используемая», пока ваша программа работает.
Не имеет значения, если вы больше не удерживаете указатель на эту память вваша программа.В языке C нет механизма для проверки этого и автоматического освобождения памяти.
Кроме того, когда вы выделяете память с помощью malloc
, функция не знает, для чего вы используете память.Для распределителя это всего лишь байты.
Так что, когда вы free
указатель (или массив указателей), нет логики "осознать", что это указатели, которые содержат адреса памяти.
Это просто то, как спроектирован язык C: управление динамической памятью почти 1 полностью ручное - оставлено на усмотрение программиста, поэтому вы должны вызывать free
для каждого вызова malloc
.
1 Язык C обрабатывает некоторые из более утомительных задач, необходимых для динамического выделения памяти в программе, таких как поиск места для получения свободного непрерывного фрагмента памяти того размера, который вы запрашивали.