void *realloc(void *ptr, size_t newsize)
Прототип:
Описание:
Функция realloc() изменяет величину выделенной памяти, на которую указывает ptr, на новую величину, задаваемую параметром newsize. Величина newsize задается в байтах и может быть больше или меньше оригинала. Возвращается указатель на блок памяти, поскольку может возникнуть необходимость переместить блок при возрастании его размера. В таком случае содержимое старого блока копируется в новый блок и информация не теряется.
Если свободной памяти недостаточно для выделения в куче блока размером newsize, то возвращается нулевой указатель.
Пример:
Следующая программа выделяет 17 байт памяти, копирует строку «this is 16 chars» в эту область, а затем использует функцию realloc(), с тем чтобы увеличить размер блока до 18 байт и поместить в конце точку. #include <stdlib.h> #include <stdio.h> #include <string.h> int main(void) { char *p; p = (char *) malloc(17); if(!p) { printf("Allocation error."); exit (1); } strcpy(p, "This is 16 chars"); p = (char *) realloc (p,18); if(!p) { printf("Allocation error."); exit (1); } strcat (p, "."); printf(p); free(p); return 0; }
