Функция free

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

Автор: admin
Дата: 02.09.2012
Поделиться:

Комментарии

  1. Ульян Романов

    То есть мы высвобождаем память сразу и buffer2, и buffer3?

    free(buffer3);
    • Mercury

      > То есть мы высвобождаем память сразу и buffer2, и buffer3?

      На самом деле после вызова функции realloc указатель buffer2, возможно, освобождён и указывает на мусор (а возможно — совпадает с buffer3).

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.