С помощью calloc хочу создать массив символов, размер которого может увеличиваться (заранее неизвестен). Размерность массива - вначале INIT_SIZE строк по 10 символов, потом добавляю по 5 строк.char **arr;
arr=(char **)calloc(INIT_SIZE, sizeof(char *));
for (i=0;i<INIT_SIZE;i++)
arr[i]=(char *)calloc(10, sizeof(char));
arr_size=INIT_SIZE;
..........
// Возникла необходимость увеличить массив - добавляю память еще для 5 элементов
if (index==arr_size) {
// Цикл увеличения массива
for (i=0;i<5;i++)
arr[i+index]=(char *)calloc(10, sizeof(char));
arr_size+=5;
}
В переменной index - значение индекса последнего элемента массиваПосле того как цикл увеличения массива выполнился один раз в первом элементе (arr[0]) оказывается мусор, после второго в arr[1] - тоже мусор.
Не понятно, что сделал не так, вроде все по книжке.
Пишу на C под Linux.
Заранее благодарен откликнувшимся.
если ты хочешь изменить размер блока памяти (массива), то используй realloc
man realloc
>С помощью calloc хочу создать массив символов, размер которого может увеличиваться (заранее
>неизвестен). Размерность массива - вначале INIT_SIZE строк по 10 символов, потом
>добавляю по 5 строк.
>
>char **arr;
> arr=(char **)calloc(INIT_SIZE, sizeof(char *));
> for (i=0;i<INIT_SIZE;i++)
> arr[i]=(char *)calloc(10, sizeof(char));
>
> arr_size=INIT_SIZE;
>..........
>// Возникла необходимость увеличить массив - добавляю память еще для 5 элементов
>
> if (index==arr_size) {
char**newarr=(char **)calloc(INIT_SIZE, sizeof(char *));
memcpy(); //newarr<-arr
free(arr);
arr=newarr;
// или просто realloc
>// Цикл увеличения массива
> for (i=0;i<5;i++)
> arr[i+index]=(char *)calloc(10, sizeof(char));
> arr_size+=5;
> }
>В переменной index - значение индекса последнего элемента массива
>
>После того как цикл увеличения массива выполнился один раз в первом элементе
>(arr[0]) оказывается мусор, после второго в arr[1] - тоже мусор.
>Не понятно, что сделал не так, вроде все по книжке.
>Пишу на C под Linux.
>Заранее благодарен откликнувшимся.