The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проблема с calloc"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Проблема с calloc"
Сообщение от dek emailИскать по авторуВ закладки on 27-Фев-03, 17:48  (MSK)
С помощью 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.
Заранее благодарен откликнувшимся.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Проблема с calloc"
Сообщение от NL Искать по авторуВ закладки on 27-Фев-03, 19:48  (MSK)
если ты хочешь изменить размер блока памяти (массива), то используй realloc
man realloc
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Проблема с calloc"
Сообщение от SergCh Искать по авторуВ закладки on 28-Фев-03, 07:16  (MSK)
>С помощью 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.
>Заранее благодарен откликнувшимся.


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру