Найти тему
Anger's Code

Динамическое выделение памяти в С: функции malloc, calloc, realloc, free

Динамическое выделение памяти является важной возможностью языка программирования С. Она позволяет программисту управлять памятью во время выполнения программы. Стандартные функции для динамического выделения памяти в С включают malloc, calloc, realloc и free. Все эти функции используют библиотеку stdlib.

Функция malloc выделяет блок памяти указанного размера в байтах. Синтаксис функции выглядит следующим образом:

void *malloc(size_t size);

Функция возвращает указатель на начало выделенного блока памяти или NULL, если выделение не удалось. Размер блока памяти выражается в байтах и должен быть положительным целым числом. Пример использования функции malloc:

Выделение памяти под 5 элементов типа int
Выделение памяти под 5 элементов типа int

Функция calloc выделяет блок памяти для элементов указанного размера, инициализируя их нулевыми значениями. Синтаксис функции выглядит следующим образом:

void *calloc(size_t num, size_t size);

Функция возвращает указатель на начало выделенного блока памяти или NULL, если выделение не удалось. Параметр num определяет количество элементов, а size - размер каждого элемента. Общий размер выделенного блока памяти будет равен num * size байт. Пример использования функции calloc:

Выделение памяти под 5 элементов типа int и их инициализация нулевыми значениями
Выделение памяти под 5 элементов типа int и их инициализация нулевыми значениями

Функция realloc изменяет размер выделенного блока памяти. Синтаксис функции выглядит следующим образом:

void *realloc(void *ptr, size_t size);

Функция возвращает указатель на начало изменённого блока памяти или NULL, если изменение размера не удалось. Параметр ptr - указатель на начало исходного блока памяти, а size - новый размер блока памяти в байтах. Пример использования функции realloc:

-4

В этом примере, мы сначала выделили память под 5 элементов типа int. Затем изменили размер блока памяти на 10 элементов.

Функция free освобождает ранее выделенный блок памяти. Синтаксис функции выглядит следующим образом:

void free(void *ptr);

Функция не возвращает значения. Параметр ptr - указатель на начало выделенного блока памяти, который необходимо освободить. Пример использования функции free:

-5

В этом примере, мы также выделили память под 5 элементов. Затем мы освободили блок памяти.

При использовании функций malloc, calloc и realloc необходимо быть аккуратным и следить за правильным выделением и освобождением памяти, чтобы избежать утечек памяти или ошибок доступа к некорректной памяти. Функция free должна быть вызвана для каждого блока памяти, выделенного с помощью malloc, calloc или realloc, чтобы избежать утечек памяти.

Наука
7 млн интересуются