Функция free
вызывается для освобождения памяти, выделенной в куче. то есть через malloc
, calloc
или realloc
.
Вы должны передать тот же указатель, который был возвращен malloc
в функцию free
. Поскольку NULL
может быть возвращено malloc
в некоторых случаях, безопасно передать NULL
в качестве аргумента free
, так что free(NULL)
просто ничего не делает.
Кроме того, вы должны вызывать функцию free
только один раз за malloc
. Вызов free
для указателя, который не был выделен или уже был освобожден, является неопределенным поведением.
По этой причине может быть хорошей идеей установить указатель на NULL
после освобождения is, если вы собираетесь использовать его снова.
int *p;
p = malloc(n * sizeof(int)); // n is size of the array
if (p == NULL)
{
// Take appropriate action, e.g. exit the program.
}
....
.....
// After all use of the memory is over, if allocated properly before.
free(p);
p = NULL;