Пространства имён
Варианты
Действия

std::free

Материал из cppreference.com
< cpp‎ | memory‎ | c
 
 
 
 
Определено в заголовочном файле <cstdlib>
void free( void* ptr );

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

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

Её поведение не определено, если значение ptr не равно полученному ранее от std::malloc(), std::calloc() или std::realloc(), а также если память по указателю ptr была уже очищена с помощью std::free() или std::realloc(), но никаких других вызовов std::malloc(), std::calloc() или std::realloc(), порождающих этот указатель не было сделано.

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

Содержание

[править] Параментры

ptr - указатель для очистки памяти

[править] Возвращаемое значение

(нет)

[править] Примечание

Функция принимает (и ничего не делает) с нулевым указателем, чтобы сократить количество специальных преобразований. Успешно распределение было или нет, указатель, возвращённый выделяющими память функциями, безопасно передавать в 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 не нулевой указатель, а значит p2 освободил std::realloc
       std::free(p3);
    else // p3 - нулевой указатель, а значит p2 не освободил std::realloc
       std::free(p2);
}


[править] См. также