Прототип функции free:
void free( void * ptrmem );
Название | Язык |
---|---|
stdlib.h | С |
cstdlib | С++ |
Описание
Функция free
освобождает место в памяти. Блок памяти, ранее выделенный с помощью вызова malloc
, calloc
или realloc
освобождается. То есть освобожденная память может дальше использоваться программами или ОС.
Обратите внимание, что эта функция оставляет значение ptr
неизменным, следовательно, он по-прежнему указывает на тот же блок памяти, а не на нулевой указатель.
Параметры:
- ptrmem
Указатель на блок памяти, ранее выделенный функциямиmalloc
,calloc
илиrealloc
, которую необходимо высвободить. Если в качестве аргумента передается нулевой указатель, никаких действий не происходит.
Возвращаемое значение
Функция не имеет возвращаемое значение.
Пример: исходный код программы
//пример использования функции free #include <iostream> #include <cstdlib> int main() { int * buffer1 = (int*) malloc(100 * sizeof(int)), // выделяем память под 100 элементов массива типа int, с предварительной инициализацией * buffer2 = (int*) calloc(100, sizeof(int)), // выделяем память под 100 элементов массива типа int, без инициализации * buffer3 = (int*) realloc(buffer2, 500 * sizeof(int)); // перераспределить память в блоке buffer2, новый размер блока - 500 элементов free(buffer1); // высвобождаем блок памяти buffer1 free(buffer3); // высвобождаем блок памяти buffer2, его новый адрес, после перераспределения, хранится в buffer3 return 0; }
Пример работы программы
Эта программа не имеет никакого вывода данных на экран. Просто демонстрирует несколько способов выделения и освобождения динамической памяти с помощью функций заголовочного файла cstdlib
.
Комментарии
Ульян Романов
То есть мы высвобождаем память сразу и buffer2, и buffer3?
Mercury
> То есть мы высвобождаем память сразу и buffer2, и buffer3?
На самом деле после вызова функции realloc указатель buffer2, возможно, освобождён и указывает на мусор (а возможно — совпадает с buffer3).