Как работает free в си
Перейти к содержимому

Как работает free в си

Как работает free в си

Освобождает блок памяти.

Синтаксис

Параметры

memblock
Ранее выделенный блок памяти, который требуется освободить.

Remarks

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

В случае возникновения ошибки при освобождении памяти для errno задаются сведения о характере сбоя, полученные от операционной системы. Дополнительные сведения см errno . в статьях, _doserrno _sys_errlist , и _sys_nerr .

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

Если приложение связано с отладочной версией библиотек времени выполнения C, free разрешается в _free_dbg . Дополнительные сведения об управлении кучей в процессе отладки см. в разделе Куча отладки CRT.

Функция free помечена как __declspec(noalias) ; это означает, что функция гарантировано не изменяет глобальные переменные. Для получения дополнительной информации см. noalias .

Чтобы освободить память, выделенную с помощью _malloca , используйте _freea .

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.

Free (функция языка Си)

free (англ. освобождение) — функция стандартной библиотеки языка Си, предназначенная для освобождения ранее выделенной динамической памяти.

Содержание

Описание функции

Назначение

Функция принимает указатель на область, подлежащую освобождению, или NULL. Возвращаемого значения не имеет. free() не проверяет указатель на правильность, и может «освободить» невыделенную область памяти, что в некоторых реализациях может привести к необратимому повреждению кучи (англ. heap ). Вызов функции с NULL безопасен (проверка на NULL обязана выполняться внутри free() согласно стандарту). Для избежания повреждения кучи некоторые руководства по языку Си рекомендуют обнулять каждый освобождаемый указатель.

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

Функция объявлена в заголовочных файлах malloc.h, stdlib.h. Точное описание поведения функции приводится в стандарте ANSI C, на него же ссылается описание в стандарте POSIX.

Параметры функции

  • ptr — указатель на область памяти, предварительно выделенную malloc, calloc, realloc функциями либо NULL.

Пример использования

См. также

Ссылки

  • free  — системные интерфейсы, The Single UNIX® Specification, выпуск 7 от The Open Group (англ.)

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое «Free (функция языка Си)» в других словарях:

free (функция языка Си) — У этого термина существуют и другие значения, см. Free. free (англ. освобождение)  функция стандартной библиотеки языка Си, предназначенная для освобождения ранее выделенной динамической памяти. Содержание 1 Описание функции … Википедия

free (функция) — У этого термина существуют и другие значения, см. Free. free (англ. освобождение)  функция стандартной библиотеки языка Си, предназначенная для освобождения ранее выделенной динамической памяти. Содержание 1 Описание функции 2 Назначение … Википедия

Free — (свободный; также бесплатный или открытый для участия): Free  функция стандартной библиотеки языка Си, Free  английская группа, исполнявшая тяжёлый блюз рок, 1968 1973 годы. Free  альбом группы Free, 1969 год. Free  альбом… … Википедия

Орфография английского языка — Орфография английского языка  совокупность правил, регламентирующих написание слов английского языка. Английский язык имеет более сложные правила правописания по сравнению с другими языками, что связано со сложной историей формирования… … Википедия

i-Free — Стиль этой статьи неэнциклопедичен или нарушает нормы русского языка. Статью следует исправить согласно стилистическим правилам Википедии … Википедия

strdup — strdup  нестандартная функция языка программирования Си, создающая копию указанной нуль терминированной строки в куче (используя malloc) и возвращающая указатель на неё. Чтобы освободить место, используемое созданной копией, необходимо… … Википедия

Strdup — strdup  нестандартная функция языка программирования Си, создающая копию указанной нуль терминированной строки в куче (используя malloc) и возвращающая указатель на нее. Чтобы освободить место, используемое созданной копией, необходимо… … Википедия

С++ — См. также: Си (язык программирования) C++ Семантика: мультипарадигмальный: объектно ориентированное, обобщённое, процедурное, метапрограммирование Тип исполнения: компилируемый Появился в: 1985 г. Автор(ы): Бьёрн Страуструп … Википедия

C++ — У этого термина существуют и другие значения, см. C. См. также: Си (язык программирования) C++ Семантика: мультипарадигмальный: объектно ориентированное, обобщённое, процедурное, метапрограммирование Тип исполнения: компилируемый Появился в … Википедия

Си (язык программирования) — У этого термина существуют и другие значения, см. Си. Запрос «Язык программирования Си» перенаправляется сюда; см. также другие значения. Си Класс языка: процедурный Тип исполнения: компилируемый Появился в: 1969 1973 Автор( … Википедия

Функция free

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

Пример

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *