Spec-Zone.ru › C++

std::free

Определён в заголовочном файле <cstdlib>
void free( void* ptr );

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

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

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

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

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

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

  • Библиотечные версии operator new и operator delete
  • Пользовательские замены глобальных operator new и operator delete
  • std::calloc, std::malloc, std::realloc, std::aligned_alloc(начиная с C++17), std::free

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

(начиная с C++11)

Параметры

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

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

(нет)

Примечания

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

Пример

#include <cstdlib>

int main()
{
    int* p1 = (int*)std::malloc(10 * sizeof *p1);
    std::free(p1); // every allocated pointer must be freed

    int* p2 = (int*)std::calloc(10, sizeof *p2);
    int* p3 = (int*)std::realloc(p2, 1000 * sizeof *p3);
    if (!p3) // p3 null means realloc failed and p2 must be freed.
        std::free(p2);
    std::free(p3); // p3 can be freed whether or not it is null.
}

См. также

Документация C для free

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

Spec-Zone.ru

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