Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2012, 23:46   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию выделение памяти в Си

Здравствуйте.

Меня интересует способ динамического выделения памяти по ходу программы. Например, необходимо сохранить 1000 строк текста в массивах. Можно статически, предположив, что максимальная длина строки 1024 байт.

Код:
char str[1025][1001];
Вообще строки имеют разную длину, и не все достигают 1024 байт.

Считаю разумным использовать динамическое выделение памяти, но не уверен в правильности действий. Потому и спрашиваю:

Код:
char *p[1001];
...
p = calloc(длина строки,sizeof(char));
...
Файл содержит строки разной длины, собственно программа считывает строку, узнает ее длину, выделяет память, и записывает туда инфу. А массив указателей упрощает доступ к строкам:

Код:
...
printf("первая строка: %s\n",p[0]);
printf("153 строка: %s\n",p[152]);
...
Нормально так? Или же существует способ оптимальнее?
Артэс вне форума Ответить с цитированием
Старый 12.09.2012, 08:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
char *p[1001];
Тогда тут размерность не нужна.
Ты, получается, просишь 1001 указатель.
Цитата:
Или же существует способ оптимальнее?
Существует. Скачать весь файл в память, пройтись по нему и в отдельный массив записать местоположения символов переноса каретки (проиндексировать файл по переводу строки).
Тогда чтоб добраться до скажем 65-й строки тебе нужно будет скопировать часть байт из позиции n[64] до n[65]
Где n - тот самый массив индексов.

Внимание!: При редактировании данных система усложняется
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.09.2012, 10:57   #3
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Хм, а если дальнейшая работа с этими строками в памяти подразумевает их изменение? И одна строка данных становится длиннее, чем была. Может все же уместен вариант с выдачей например 1000 указателей (памяти не много возьмет), и уже через эти указатели управлять каждой строкой отдельно, обнуляя и выделяя новую память персонально через free и calloc?
Артэс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение памяти Dady 1992 Общие вопросы C/C++ 2 26.06.2012 18:45
Распределение памяти. Динамическое выделение памяти с++ Tolian92 Помощь студентам 8 14.05.2012 21:44
Выделение памяти в С++ Dj-IIyIIc Общие вопросы C/C++ 4 18.10.2010 14:39
Выделение памяти mutabor Общие вопросы Delphi 8 26.08.2009 18:16
Выделение памяти antoha.by Паскаль, Turbo Pascal, PascalABC.NET 2 29.04.2008 20:04