Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

Проверка индекса для массива   Найти похожие ветки 

 
learner ©   (2006-10-02 23:08) [0]

Был глюк в програме. Еле нашла место.
Эта процедура не всегда срабатывала правильно ( когда ей захочется )
При верных индексах выдавала False
function QueryIndex(const i, j: integer; const Arr: TDblInfoArr): Boolean;
begin
Result:=(i in [Low(Arr)..High(Arr)]) and (j in [Low(Arr[i])..High(Arr[i])]);
end;
Переписала ее:
function QueryIndex(const i, j: integer; const Arr: TDblInfoArr): Boolean;
var
Test: Boolean;
begin
Result:=(i in [Low(Arr)..High(Arr)]) and (j in [Low(Arr[i])..High(Arr[i])]);
Test:=(i >= Low(Arr)) and (i <= High(Arr)) and (j >= Low(Arr[i])) and (j <= High(Arr[i]));
if Result <> Test
 then ShowMessage(IntToStr(i) + "=" + IntToStr(j) + #13#10 +
                  IntToStr(Low(Arr)) + "=" + IntToStr(High(Arr)) + #13#10 +
                  IntToStr(Low(Arr[i])) + "=" + IntToStr(High(Arr[i])));
end;
И, иногда, выдается ошибка типа:
0=19
0=32
0=272
Тупо смотрю и не понимаю, как такое может быть ?
Или может мне уже в дворники пора ?
P.S.
На всякий случай
type
TInfo = record
  // bala -bala
 end;
TInfoArr = array of TInfo;
TDblInfoArr = array of TInfoArr;


 
guav ©   (2006-10-02 23:20) [1]

> (i in [Low(Arr)..High(Arr)])

Тип set ограничен 0..255, т.к. индексы могут не вписываться в диапазон, следует использовать вариант

> Test:=(i >= Low(Arr)) and (i <= High(Arr)) and (j >= Low(Arr[i])
> ) and (j <= High(Arr[i]));


 
guav ©   (2006-10-02 23:24) [2]

т.е. код

> Result:=(i in [Low(Arr)..High(Arr)]) and (j in [Low(Arr[i])
> ..High(Arr[i])]);
для массивов длинее 255 неверен. Не проверял, но предполагаю, что High(Arr) приводится к Byte, потому он всё же компилируется.

Для автоматической проверки диапазонов в рантайм с выбросом исключений при нарушении следует использовать {$RANGECHECKS ON}


 
learner ©   (2006-10-03 10:32) [3]

Спасибо !



Страницы: 1 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.031 c
2-1160336277
vain
2006-10-08 23:37
2006.10.22
Form.Refresh


15-1158828707
VitV
2006-09-21 12:51
2006.10.22
Что будет с COM плсле выхода NET?


2-1160208207
iamdanil
2006-10-07 12:03
2006.10.22
memo в webbrowser


2-1160119374
dima_kds
2006-10-06 11:22
2006.10.22
ADOQuery в DBF


2-1159851131
aht
2006-10-03 08:52
2006.10.22
окно формы поверх остальных окон