realloc()

#include <stdlib.h>
void *realloc(void *ptr, size_t size);

Описание

Изменяет размер ранее выделенной памяти, адресуемой параметром, в соответствии с заданным размером

Действие функции realloc() в версии С99 немного отличается от ее работы в языках C++ и С89, хотя основной результат совпадает. В языках C++ и С89 функция realloc() изменяет размер ранее выделенной памяти, адресуемой параметром ptr в соответствии с заданным размером size. Значение параметра size может быть больше или меньше исходного. Функция realloc() возвращает указатель наблок памяти, поскольку не исключена необходимость перемещения этого блока при увеличении размера памяти. В этом случае содержимое старого блока(до size байт) копируется в новый блок.

В версии С99 блок памяти, адресуемый параметром ptr, освобождается, а вместо него выделяется новый блок. Содержимое нового блока совпадает с содержимым исходного(по длине, переданной в параметре size). Функция возвращает указатель на новый блок. Причем разрешается, чтобы новый и старый блоки начинались с одинакового адреса(т.е. указатель, возвращаемый функцией realloc(), может совпадать с указателем, переданным в параметре ptr).

Если указатель ptr нулевой, функция realloc() просто выделяет size байт памяти и возвращает указатель на эту память. Если значение параметра size равно нулю, память, адресуемая параметром ptr, освобождается.

Если в куче нет достаточного объема свободной памяти для выделения size байт, возвращается нулевой указатель, а исходный блок памяти остается неизменным.