| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > Добавить элемент в динамический массив |
| Автор: iff 25.5.2011, 16:28 | ||||
| Пишу на Turbo Pascal. Есть динамический одномерный массив. нужно добавить в его конец ещё один элемент. если это делать так:
то все ранее введненные элементы стираются. нужно что-то типа:
но только, понятное дела, getmem(myarr + counter * sizeof(integer), sizeof(integer)); не работает. Если использовать getmem(myarr[counter], sizeof(integer));, то тоже не работает. Т.е. получается здесь нужно сложить адреса... Добавлено через 32 секунды Пока что только один вариант - не использовать getmem вообще. |
| Автор: Snowy 25.5.2011, 17:07 | ||
| При увеличении массива, выделяется новая память под новый размер. Данные же остаются в памяти, которая была выделена в предыдущий раз. Нужно оттуда их перенести в новую и старую освободить. Пример:
|
| Автор: cemick 25.5.2011, 17:25 | ||||
| Зачем велосипеды придумывать?? Во первых у вас не динамический массив, динамический же будет arrtype = array of integer; Затем есть процедура перераспределения памяти существующего блока ReallocMem. И вообще вся эта работа уже делается в динамическом массиве, когда вызывается метод из System:
Проверка:
А-а-а, TURBO PASCAL |
| Автор: Snowy 25.5.2011, 18:59 |
| В турбопаскале нет динамических массивов. Вот поэтому и использовались такие костыли с отключенной проверкой границ. И, поскольку велосипед придумали позже, то приходилось изворачиваться вот так. |
| Автор: iff 25.5.2011, 20:01 |
| Snowy, спасибо. |