| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Visual C++] Как сделать динамическую структуру? |
| Автор: Aaron 31.10.2006, 17:03 | ||||
структура статичная, плз, как динамическую сделать? ;)
|
| Автор: sidslog 31.10.2006, 17:14 | ||||
Выделять память:
где n - количество слов, m - длина слова |
| Автор: Aaron 31.10.2006, 17:23 |
| Извини, можно чуть подробнее, куда код для каждой переменной ставить? Просто голова уже совсем к ночи не варит... |
| Автор: Damarus 31.10.2006, 18:47 |
Используй STL. |
| Автор: Aaron 31.10.2006, 19:00 |
| Я конечно, извиняюсь, но я в такие дебри еще не лез)) Мне б с выделением памяти разобраться.....не подскажешь? |
| Автор: Kuvaldis 31.10.2006, 20:50 | ||||||||||||||
Aaron,
У тебя было объявление
Те. задавалась матрица из 100 строк и 20 столбцов Заменим данное объявление таким:
мы объявлили массив из 100 элементов. Элементы - указатели на строки.Пустые указатели. Т.е. первоначально данные и память не выделяются. Это нужно делать явно.Строка - это символьный массив, завершаюшийся символом '\0' (нуль-терминатор) В данном случае жестко задано количество имен - 100 Для выделения памяти для каждого имени необходимо сделать следующую операцию
т.е. существует возможность создавать непрямоугольные матрицы, а переменной длины Избавимся от недостатка ограниченности количества имен. У нас было
Сделаем так
Получился указатель на указатель. Если теперь выделить память для указателя name размером в 40 единиц
то получится массив указателей на 40 элементов, который теперь можно использовать, как я показал раньше. Здесь следует еще раз обратить внимание, что в С имя массива является указателем на его первый элемент. После выделения памяти для указателя mas можно обращаться к его элемнтам как обычно, по иддексу% mas[i]. Остается выделить память для строк. (см. выше) еще раз,Смысл ввода указателя на указатель в том, что заранее не ограничивается не только размер имени, но и само их количество Постарался объяснить как можно проще. Если что, обращайся |
| Автор: Rockie 31.10.2006, 21:17 | ||||
Aaron, ptr_s - указатель на структуру, память для него выделяется с помощью new, очищается delete
добавлено: динамический массив структур создается похоже, только очищается delete []:
|
| Автор: Damarus 31.10.2006, 21:56 | ||
И всётаки STL рулит
|
| Автор: Aaron 2.11.2006, 18:42 | ||
Вот, вроде есть, и работает:
(вся программа) Если я все сделал правильно, то один вопрос - не допер, как заделать неограниченное кол-во строк? И в общем, все ли правильно я сделал-то? |
| Автор: Kuvaldis 4.11.2006, 11:17 | ||||
Aaron,
За такое освобождение памяти тебе бы отрезали руки (у тебя идет утечка, так как указатель ты обнулил, а память НЕ освободил) освобождение идет через оператор delete [] <указатель> т.е. в твоем случае:
Добавлено @ 11:19 Damarus прав: здесь нужен список |
| Автор: Damarus 4.11.2006, 11:20 | ||||
|
| Автор: Kuvaldis 4.11.2006, 11:23 | ||
Damarus,
Здесь не надо continue. Бесконечный цикл, однако |
| Автор: Damarus 4.11.2006, 11:32 | ||||
Действительно. Не подумал. Спасибо. Добавлено @ 11:37
Добавлено @ 11:43 Aaron, вообщем переписывать надо. |
| Автор: Aaron 4.11.2006, 14:12 | ||||||
Damarus, не совсем понял первое
про это плз подробнее... путаюсь с этой строкой, либо в ней с синтаксисом что-то нето....в конкретном случае скажем для name как она будет выглядеть? (вылетает с сотней однотипных ошибок) что за список?
благодарю, фукнкция написана год назад, просто вставил ее сюда непеределывая)) Kuvaldis,
мда, с этим я заглючил и забыл, пасиб. поправил. |
| Автор: Damarus 4.11.2006, 14:30 | ||
Ты сначало на ответь, чем у тебя является структура addr. http://ru.wikipedia.org/wiki/Связанный_список
Как уже сказал Kuvaldis, else continue; можно убрать. |
| Автор: Aaron 4.11.2006, 14:41 |
addr - таблица, в которой хранится информация (фио, номер ч/б, книга, дата возврата), т.е. библиотечные записи. |
| Автор: Aaron 5.11.2006, 13:01 |
| ау? |
| Автор: Kuvaldis 5.11.2006, 13:21 | ||
Aaron,
addr - это имя массива. А имя массива - это указатель (!) на данные Если сделать динамический список, который будет изменять свои размеры при добавлении удалении записей, то это будет неэффективно: придется каждый раз копировать его в новое место. Список предствляет собой динамическую структуру данных, в которой помимо самих данных о книгах и т.д. присутствует указатель на следующий такой же узел с данными. почитай http://algolist.manual.ru/ds/basic/index.php |