Namespaces
Variants

std:: free

From cppreference.net
< cpp ‎ | memory ‎ | c
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Определено в заголовочном файле <cstdlib>
void free ( void * ptr ) ;

Освобождает пространство, ранее выделенное с помощью std::malloc , std::calloc , std::aligned_alloc (since C++17) или std::realloc .

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

Поведение не определено, если значение ptr не равно значению, возвращённому ранее std::malloc , std::calloc , std::aligned_alloc (since C++17) или std::realloc .

Поведение не определено, если область памяти, на которую ссылается ptr , уже была освобождена, то есть std::free или std::realloc уже были вызваны с аргументом ptr , и после этого не было вызовов std::malloc , std::calloc , std::aligned_alloc (since C++17) или std::realloc , которые вернули указатель, равный ptr .

Поведение не определено, если после того, как std::free завершила работу, производится доступ через указатель ptr (если только другая функция выделения памяти не вернула значение указателя, равное ptr ).

Следующие функции должны быть потокобезопасными:

Вызовы этих функций, которые выделяют или освобождают определенную единицу памяти, происходят в едином общем порядке, и каждый такой вызов освобождения happens-before следующего выделения (если таковое имеется) в этом порядке.

(since C++11)

Содержание

Параметры

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

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

(нет)

Примечания

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

Пример

#include <cstdlib>
int main()
{
    int* p1 = (int*)std::malloc(10 * sizeof *p1);
    std::free(p1); // каждый выделенный указатель должен быть освобожден
    int* p2 = (int*)std::calloc(10, sizeof *p2);
    int* p3 = (int*)std::realloc(p2, 1000 * sizeof *p3);
    if (!p3) // p3 null означает, что realloc не удался и p2 должен быть освобожден
        std::free(p2);
    std::free(p3); // p3 может быть освобожден независимо от того, является ли он null
}

Смотрите также