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;
}
#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;
}