CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
realloc
REALLOC
#include <malloc.h> требуется только для объявления
функции
char *realloc(ptr,size);
char *ptr; указатель на ранее захваченный
блок памяти
unsigned size; новый размер в байтах
Описание.
Функция realloc изменяет размер ранее захваченного блока
памяти. Аргумент ptr указывает на начало блока. Аргумент size за-
дает новый размер блока в байтах. Содержимое блока не изменяется.
Аргумент ptr может указывать на блок, который должен быть осво-
божден прежде, чем последуют вызовы calloc, halloc, malloc,
realloc.
Возвращаемое значение.
Функция realloc возвращает char-указатель на перезахвачен-
ный блок памяти. Блок может быть передвинут, если его размеры из-
менены, поэтому аргумент ptr для функции realloc не обязательно
должен быть таким же, как и возвращаемое значение.
Возвращается значение NULL, если памяти недостаточно, чтобы
расширить блок к заданному размеру. Если это происходит, то пер-
воначальный блок освобождается.
В памяти, на которую указывает возвращаемое значение, га-
рантировано выравнивание для хранения любого типа объекта. Чтобы
получить указатель на тип, отличный от char, используется преоб-
разователь типа возвращаемого значения.
См.также caloc, free, halloc, malloc.
Пример:
#include <malloc.h>
#include <stdio.h>
char *alloc;
/* выбирает достаточно большое пространство для 50
символов */
alloc=malloc(50*sizeof(char));
.
.
.
/* перезахватывает блок, который содержит 100 символов */
if (alloc != NULL)
alloc=realoc(alloc,100*sizeof(char));
Оставить комментарий
Комментарии
1.
+2 / -0


8 сентября 2005, 12:31:40
Все правильно. У нее возврат такой-же как и у malloc.
char *dres;
для начала неплохо бы выделить мамять под указатель, а то непятно что вообще собираемся расшириить
dress=(char *) malloc(10);
после этого realloc надо указать тип возвращаемого указателя в скобках. В нашем случае char
dres = (char *) realloc (dres , 20);
итог: вместо 10 байт мы имеем 20 байт с сохраненной в первых 10-ти инфой.
char *dres;
для начала неплохо бы выделить мамять под указатель, а то непятно что вообще собираемся расшириить
dress=(char *) malloc(10);
после этого realloc надо указать тип возвращаемого указателя в скобках. В нашем случае char
dres = (char *) realloc (dres , 20);
итог: вместо 10 байт мы имеем 20 байт с сохраненной в первых 10-ти инфой.
2.


20 марта 2005, 12:26:25
char *dres;
dres = realloc (dres , size * sizeof(char));
error C2440: '=' : cannot convert from 'void *' to 'char *'
возвращает не char-указатель а void -указатель
Return Value
realloc returns a VOID pointer to the reallocated (and possibly moved) memory block
dres = realloc (dres , size * sizeof(char));
error C2440: '=' : cannot convert from 'void *' to 'char *'
возвращает не char-указатель а void -указатель
Return Value
realloc returns a VOID pointer to the reallocated (and possibly moved) memory block
