![]() |
![]() |
Прог 11.04.2004 - 11:09 |
В системе вложенных циклов на определенном уровне вложенности идет установка нач. значений, некоторых переменных типа real: Begin max:=0; kol:=0; min:=0; ...... while ... do Begin end; ...... end; Не поверите, но строку min:=0; компилятор пропускает, т.е min<>0 в теле цикла; если поставить BreakPoint на эту строку то остановки не происходит, если поставить на предидущую, а далее по шагам, то курсор эту строку просто проскакивает, пробовал менять строки местами, давать переменной другое имя, ничего не помогает. Что делать? |
Прог 1 - 11.04.2004 - 11:27 | P.S. Меняю тип, например на string, тогда компилятор строку min=''; не проскакивает. |
Manfred 2 - 11.04.2004 - 11:37 | Проверь, не является ли min функцией библиотечной, либо константой. |
VaS 3 - 11.04.2004 - 12:48 | Сделай Build All и посмотри Hints & Warnings - скорее всего значение 0 никогда не используется. Отключи оптимизацию - строка скомпилируется. |
Прог 4 - 12.04.2004 - 13:32 |
То Manfred: так проверял уже, не является, да и говорил я кажется, что давал переменной другое имя, но все равно спасибо. To VaS: спасибо, прийду домой, обязательно проверю, да кстати значение переменной близко к нулю (отрицательный порядок, большой по модулю), но не чистый ноль, так самое интересное, что до этого присвоения max:=0; kol:=0; срабатывают! |
OF 5 - 12.04.2004 - 13:41 |
Иммется ввиду оптимизация... Например ты пишешь так: min:=0; ..... и где-то дальше: min:=Какая_Нить_Функция(); ... В этом случае во время отладки на строчке min:=0 брякпоинт не сработает, т.к. этой инструкции вообще не будет в скомпилированной программе. Оптимизация.... :) |
ScrewDriver 6 - 12.04.2004 - 19:08 |
У меня было похожее что-то. В цикле вызывал процедуру, которая некорректно отрабатывала, при возврате из процедуры в цикл изменялись локальные переменные, в частности счетчик цикла. Если вызываешь в цикле процедуры, проверь их и что ты в них делаешь ИМХО ...В Дельфи 6 ... |
FWP 7 - 13.04.2004 - 08:53 | У нас неблагодарная работа. Радость обнаружения ошибки омрачается осознанием собственной тупости. |
OF 8 - 13.04.2004 - 09:15 | (7) :)) |
Прог 9 - 13.04.2004 - 09:55 |
То OF (5): дык в том то и дело, что где то дальше в цикле не min:=Какая_Нить_Функция();, а min:=min+Какая_Нить_Функция();, типа если нач. значение не верно, то и результат не верный, причем погрешность растет с каждой итерацией. То ScrewDriver(6): параметр цикла в теле цикла не меняется во все процедуры и функции параметры передаются по значению. 7-8: без коментариев. |
Прог 10 - 13.04.2004 - 10:11 |
P.S. Да, забыл сказать в опциях проекта (опции компилятора) оптимизацию кода отключил, все равно строку проскакивает. OFF(5): Оптимизация.... :) |
9600 11 - 13.04.2004 - 12:04 | Дай полный код от присвоения до конца цикла. Обычно если что-то происходит не так, то на самом деле оно происходит так как нужно, но отлично от твоего понимания о "до'лжной правильности" :))) |
FWP 12 - 13.04.2004 - 12:43 |
"7-8: без коментариев." Ничего личного. Сам столько раз попадал. Кстати, не знаю, насколько правильно сравнивать переменную вещественного типа на равенство? |
Sabrian 13 - 13.04.2004 - 15:44 |
Сколько раз на такое счастье попадал :)))))вот так: a:integer; b:integer; m:double; a=b xor b; m=b*a; бывает помогает, вообще компилятор Delphi это кошмар у меня бывали случаи неверного расчета индексов циклов(!!!!) и корреляцй локальных и глобальных значений по значению (например неверный расчет смещения локальной переменной в стеке если её имя совпадало с глобальной) |
VaS 14 - 13.04.2004 - 21:57 |
> у меня бывали случаи неверного расчета индексов циклов(!!!!) "у Ленина в мавзолее до сих пор растут ногти" |
Наф 15 - 14.04.2004 - 07:25 | Сколько раз я пытался сказать: вот попался голубчик-компилятор, неверно работаешь.... неверно работала в итоге моя голова. Правда был один случай, как то заполночь мы делали какойто "бешеный" метод вычислений с комплексными переменными, вроде была ошибка компилятора, обошли ее (повторяю, время было недетское). Впрочем теперь я думаю, что зря я пример не сохранил, наверное сейчас бы убедился, что проблема всему - голова. |
FWP 16 - 14.04.2004 - 08:11 |
"a:integer; b:integer; m:double; a:=b xor b; m:=b*a;" А не проще было: m := 0.0; |