Прототип функции 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).