Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Pascal] С первым вариантом я был не прав, сорри ;-) 08.04.02 19:51 Число просмотров: 859
Автор: Cyril <sc> Статус: Member Отредактировано 08.04.02 20:18 Количество правок: 2
|
> ;) > Насчет 64к - возьми, например, дельфи или TMT) > Вопрос был о том почему языковые конструкции глючат или где > я не прав. > > > > Это не полноценное решение, я говорил о массивах > с > > > произвольной размерностью и о багах в их > адресации ... > > в > > > принципе! > > > > верхние границы индексов можно(и даже нужно) задавать > любые > > лишь бы массив влезал в 64к
Когда объявляешь массив
TArray = array [1..20, 1..20, 1..2] of integer,
а после выделяешь память под a : TArray
то вся индексная арифметика генерится на основе обявленного типа TArray
поэтому и тот вариант который я предлагал, и твой, - оба неверны
Предположим что массив объявлен сл. образом
TA = array[1..1,1..1] of byte
будем пользоваться формулой для расчета адреса addr = y*xlen+x
на основе объявления типа TA компилер расчитывает длину xlen=1,
тогда получаем следующие адреса:
x=1 y=1 addr=2
x=1 y=2 addr=3
x=2 y=1 addr=3
x=2 y=2 addr=4
Похоже, что отсюда вытекает следующий вывод: пользоваться встроенным индексированием для динамических массивов нельзя, как это не печально ;-(
|
|
|