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).
|
Вызов |
(с 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
См. также
| выделяет память (функция) |
|
|
(C23) |
освобождает ранее выделенную память заданного размера (функция) |
|
(C23) |
освобождает ранее выделенную выровненную память заданного размера (функция) |
Документация C++ для free |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/memory/free