Динамическое выделение памяти является важной возможностью языка программирования С. Она позволяет программисту управлять памятью во время выполнения программы. Стандартные функции для динамического выделения памяти в С включают malloc, calloc, realloc и free. Все эти функции используют библиотеку stdlib.
Функция malloc выделяет блок памяти указанного размера в байтах. Синтаксис функции выглядит следующим образом:
void *malloc(size_t size);
Функция возвращает указатель на начало выделенного блока памяти или NULL, если выделение не удалось. Размер блока памяти выражается в байтах и должен быть положительным целым числом. Пример использования функции malloc:
Функция calloc выделяет блок памяти для элементов указанного размера, инициализируя их нулевыми значениями. Синтаксис функции выглядит следующим образом:
void *calloc(size_t num, size_t size);
Функция возвращает указатель на начало выделенного блока памяти или NULL, если выделение не удалось. Параметр num определяет количество элементов, а size - размер каждого элемента. Общий размер выделенного блока памяти будет равен num * size байт. Пример использования функции calloc:
Функция realloc изменяет размер выделенного блока памяти. Синтаксис функции выглядит следующим образом:
void *realloc(void *ptr, size_t size);
Функция возвращает указатель на начало изменённого блока памяти или NULL, если изменение размера не удалось. Параметр ptr - указатель на начало исходного блока памяти, а size - новый размер блока памяти в байтах. Пример использования функции realloc:
В этом примере, мы сначала выделили память под 5 элементов типа int. Затем изменили размер блока памяти на 10 элементов.
Функция free освобождает ранее выделенный блок памяти. Синтаксис функции выглядит следующим образом:
void free(void *ptr);
Функция не возвращает значения. Параметр ptr - указатель на начало выделенного блока памяти, который необходимо освободить. Пример использования функции free:
В этом примере, мы также выделили память под 5 элементов. Затем мы освободили блок памяти.
При использовании функций malloc, calloc и realloc необходимо быть аккуратным и следить за правильным выделением и освобождением памяти, чтобы избежать утечек памяти или ошибок доступа к некорректной памяти. Функция free должна быть вызвана для каждого блока памяти, выделенного с помощью malloc, calloc или realloc, чтобы избежать утечек памяти.