Содержание | Глава 17

Функция free

#include <stdlib.h>
void free(void *ptr);

Функция free() возвращает в динамически распределяемую область памяти блок памяти, адресуемый указателем рtr, после чего эта память становится доступной для выделения в будущем.

Обязательно следите, чтобы free() вызывалась только с указателем, который был ранее получен в результате вызова одной из системных функций динамического распределения. Использование недопустимого указателя при вызове, скорее всего, приведет к разрушению механизма управления памятью и, возможно, вызовет крах системы. При передаче нулевого указателя функция free() не выполняет никакого действия.

Пример

Эта программа распределяет блок памяти для вводимых пользователем строк, а затем освобождает блок памяти:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  char *str[100];
  int i;

  for(i=0; i<100; i++) {
    if((str[i] = malloc(128))==NULL) {
      printf("Ошибка при распределении  памяти\n");
      exit(1);
    }
    gets(str[i]);
  }

  /* Освобождение  блока  памяти */
  for(i=0; i<100; i++) free(str[i]);

  return 0;
} 

Зависимые функции

calloc() malloc() realloc()
Содержание | Глава 17