Вот пример кода:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int *array = NULL;
array = malloc(5*sizeof(*array));
if (array == NULL)
{
printf("Memory allocation error\n");
exit(1);
}
/* Now array has 5 entries, from 0 to 4 */
array[0] = array[1] = array[2] = array[3] = array[4] = 0;
array = realloc(array, 10*sizeof(*array));
if (array == NULL)
{
printf("Memory allocation error\n");
exit(1);
}
/* Now array has 10 entries, from 0 to 9 */
array[5] = array[6] = array[7] = array[8] = array[9] = 0;
free(array);
array = NULL;
}
Обратите внимание, что вы не можете изменить размер массива, выделенного из стека или из сегмента данных (или bss). Вам нужно выделить массив динамически, используя malloc(), чтобы вы могли использовать realloc() позже.
Учтите, что в вашей будущей реализации вызов realloc() каждый раз, когда новые данные помещаются в стек, слишком неэффективен. Обычная практика состоит в том, чтобы увеличить емкость массива, по крайней мере, умножив ее на 2 и сохранив емкость (максимальное количество элементов, которые может содержать массив) в дополнение к его текущему размеру. Обычно библиотеки никогда не сжимают массив, а расширяют его, если ему нужно больше места.
person
juhist
schedule
19.03.2015