Освоение функции free() в C: практическое руководство и пример
Что такое функция free() в C?
free(), входящая в стандартную библиотеку C, освобождает память, ранее выделенную через malloc(), calloc() или realloc(). Возвращая блок в кучу, она контролирует потребление памяти программой и предотвращает её истощение.
В отличие от стековых переменных, динамически выделенную память нужно освобождать явно. Пропуск free() приводит к утечкам памяти и в итоге к ошибке out-of-memory.
Синтаксис
void free(void *ptr);
ptr — указатель на блок для освобождения. Передача NULL безопасна и не производит никаких действий.
Практический пример
#include <stdio.h>
#include <stdlib.h>
int main(void) {
// Выделение места для 10 целых
int *ptr = malloc(10 * sizeof(*ptr));
if (ptr == NULL) {
fprintf(stderr, "Memory allocation failed\n");
return 1;
}
// Запись и вывод значения
ptr[2] = 50;
printf("Value of the 3rd integer is %d\n", ptr[2]);
// Освобождение памяти
free(ptr);
return 0;
}
Вывод:
Value of the 3rd integer is 50
Лучшие практики
- Всегда проверяйте возвращаемое значение
malloc()(и подобных) перед использованием указателя. - После вызова
free()присваивайте указателюNULL, чтобы избежать случайного двойного освобождения. - Не освобождайте память, не выделенную динамически.
- Вызывайте
free()как можно раньше после окончания работы с памятью, чтобы держать кучу компактной.
Язык C
- Использование нечистых функций в VHDL: повышение читаемости и поддерживаемости FSM
- Освоение функций VHDL: практическое руководство по эффективному дизайну
- std::vector в C++: динамические массивы, итераторы и практические примеры
- std::map в C++: полное руководство с примерами кода
- calloc() в C: выделение обнулённой памяти и практический пример
- Использование realloc() в C: синтаксис, лучшие практики и пример
- Метод String.length() в Java: как получить длину строки (пример)
- Освоение String.compareTo() в Java: синтаксис, сценарии использования и примеры
- Чтение файлов в Java с BufferedReader — Практическое руководство с примерами
- Мастерство метода strip() в Python: подробное руководство и практические примеры