Spec-Zone.ru › C

free

Определено в заголовке <stdlib.h>
void free( void *ptr );

Освобождает ранее выделенную память функцией malloc(), calloc(), aligned_alloc(),(с C11) или realloc().

Если ptr является нулевым указателем, функция ничего не делает.

Поведение не определено, если значение ptr не равно значению, возвращённому ранее функциями malloc(), calloc(), realloc(), или aligned_alloc()(с C11).

Поведение не определено, если область памяти, на которую ссылается ptr , уже была освобождена, то есть, free(), free_sized(), free_aligned_sized()(с C23), или realloc() уже была вызвана с ptr в качестве аргумента, и никакие вызовы malloc(), calloc(), realloc(), или aligned_alloc()(с C11) не привели к указателю, равному ptr впоследствии.

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

free является потокобезопасной: она ведет себя так, как будто обращается только к областям памяти, видимым через свой аргумент, а не к каким-либо статическим хранилищам.

Вызов free, освобождающий область памяти, синхронизирован с вызовом любой последующей функции выделения памяти, которая выделяет ту же или часть той же области памяти. Эта синхронизация происходит после любого доступа к памяти функцией освобождения и до любого доступа к памяти функцией выделения. Существует единый общий порядок всех функций выделения и освобождения памяти, работающих с каждой конкретной областью памяти.

(с C11)

Параметры

ptr - указатель на область памяти для освобождения

Возвращаемое значение

(нет)

Примечания

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

Пример

#include <stdlib.h>
 
int main(void)
{
    int *p1 = malloc(10*sizeof *p1);
    free(p1); // every allocated pointer must be freed
 
    int *p2 = calloc(10, sizeof *p2);
    int *p3 = realloc(p2, 1000*sizeof *p3);
    if(p3) // p3 not null means p2 was freed by realloc
       free(p3);
    else // p3 null means p2 was not freed
       free(p2);
}

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2023):
    • 7.24.3.3 Функция free
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.22.3.3 Функция free (стр. 254)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.22.3.3 Функция free (стр. 348)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.20.3.2 Функция free (стр. 313)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
    • 4.10.3.2 Функция free

См. также

malloc
выделяет память
(функция)
free_sized
(C23)
освобождает ранее выделенную память заданного размера
(функция)
free_aligned_sized
(C23)
освобождает ранее выделенную выровненную память заданного размера
(функция)
Документация C++ для free

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/memory/free

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API