Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 22:16   #1
vitaliy1911
Пользователь
 
Аватар для vitaliy1911
 
Регистрация: 19.05.2010
Сообщений: 35
По умолчанию в цикле ошибка "Range check error"

Код:
procedure Troute_unit.proc3(input, output: integer; route_res: array of integer);
begin
  f:=0;
  k:=1;
  xf:=pnt[output].x;
  yf:=pnt[output].y;

  while f<>1 do
    begin
      win:=pnt[input].n[1];
      for j := 1 to 9 do
       begin
        if pnt[input].n[j]=output 
          then f:=1 else
        if (pnt[input].n[j]<>0)
        and ((abs(pnt[pnt[input].n[j]].x-xf)+(abs(pnt[pnt[input].n[j]].y-yf))<(abs(pnt[win].x-xf))+abs(pnt[win].y-yf)))
          then win:=pnt[input].n[j];
       end;
       route_res[k]:=win;
       inc(k);
       input:=win;
    end;

end;
Странно, что в консольном варианте цикл работает нормально, а вот после того как я описал его в процедуре класса, стал вываливается с ошибкой "range check error"
Дело в том, что массив pnt[input].n состоит из различных цифр и нулей, причем нули всегда идут в конце. Так вот, когда цикл доходит до первого нуля, на строчке (красная) он как раз и выдает ошибку. Если в массиве 3 цифры, остальные нули, то вываливается на четвертом цикле, если 6 цифр, то вываливается на 7 и т.д.
vitaliy1911 вне форума Ответить с цитированием
Старый 11.03.2012, 22:23   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Разбейте длинные выражения в этом ифе на отдельно вычисления в промежуточные переменные, точку останова и в пошаговой трассировочке вычислите где вываливается прога за пределы массива или отрицательный индекс
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 11.03.2012 в 22:26.
Аватар вне форума Ответить с цитированием
Старый 11.03.2012, 23:10   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Читать и думать №1.
Читать и думать №2.

Если читать и думать неохота - вообще-то отладчик при возбуждении исключения тыркает вас в строчку и показывает стек вызова. Ну так и посмотрите, какие значения имеют переменные и выражения в проблемном месте. Как это сделать.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 11.03.2012, 23:44   #4
vitaliy1911
Пользователь
 
Аватар для vitaliy1911
 
Регистрация: 19.05.2010
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Разбейте длинные выражения в этом ифе на отдельно вычисления в промежуточные переменные, точку останова и в пошаговой трассировочке вычислите где вываливается прога за пределы массива или отрицательный индекс
все сделал как вы сказали, само заработало, сам не понял почему, но большое спасибо

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Читать и думать №1.
Читать и думать №2.

Если читать и думать неохота - вообще-то отладчик при возбуждении исключения тыркает вас в строчку и показывает стек вызова. Ну так и посмотрите, какие значения имеют переменные и выражения в проблемном месте. Как это сделать.
уже заработало, за ссылки спасибо, прочитаю обязательно. Кстати с удовольствием читаю ваш блог, интересно
vitaliy1911 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка: "Multiple-step operation generated errors. Check each status value" artemavd Общие вопросы Delphi 4 23.10.2011 08:07
C++ Builder XE. "Range check error" при выполнении программы. Zinigan C++ Builder 1 20.02.2011 08:22
ошибка при старте макроса "Automation error (Error 440)" Дятел Microsoft Office Excel 7 29.11.2010 17:34
range check error ChEaTeR-abc Помощь студентам 14 07.07.2010 13:58
Range check error MAcK Общие вопросы Delphi 2 24.03.2010 10:33