Russian Qt Forum
Май 07, 2024, 12:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как изменить размер char ***t в C (realloc)  (Прочитано 10347 раз)
SCAD
Гость
« : Март 16, 2004, 16:27 »

Существует таблица строк: char *t
  • [y]
как увеличить (уменьшить) размер таблицы динамически (с помошью realloc) ?
Записан
Злой
Гость
« Ответ #1 : Март 16, 2004, 17:06 »

Размер массива x * y * sizeof (char *), где x - количество строк, y - количество столбцов.
Записан
EugeneVC
Гость
« Ответ #2 : Март 16, 2004, 20:17 »

лучше вообще использовать vector и все STL
тормозней, зато можно забыть от всяких там realocах.
Записан
SCAD
Гость
« Ответ #3 : Март 17, 2004, 21:23 »

2 Злой Спасибо большое.
2 EugeneVC
Цитата: "EugeneVC"
лучше вообще использовать vector и все STL
тормозней, зато можно забыть от всяких там realocах.

Это не верный подход к делу. Можно много чего использовать, но в данном случае это решение оптимальное.
Записан
EugeneVC
Гость
« Ответ #4 : Март 17, 2004, 22:05 »

почему не оптимально?
Записан
Злой
Гость
« Ответ #5 : Март 17, 2004, 22:21 »

Код:

std::vector<std::vector<std::string> > t;

Выглядит довольно жутко. Думаю, SCAD имел в виду то, что при изменении размера массива указателей будет выполняться только копирование в новую область памяти самих указателей, а стороки останутся на месте. При изменении размера вектора будет выполняться копирование каждого вектора-элемента и объектов класса string. Действительно, не оптимально. std::list не дает доступа к элементу по его индексу. Можно попробовать
Код:

std::vector<char *> t(x * y);
// ...
char *p = t[i * y + j]; // элемент (i,j)
Записан
Anonymous
Гость
« Ответ #6 : Март 18, 2004, 20:01 »

Цитата: "Злой"
Размер массива x * y * sizeof (char *), где x - количество строк, y - количество столбцов.


Есть как минимум две потенциальные проблемы

1.  Что делать с указателями, которые появятся после увеличения памяти.  В новых ячейках таблицы будет всякий хлам и можно налететь на segmentation fault при неаккуратном чтении из таблицы.

2.  Поплывут индексы у строк.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 20.