К списку форумов К списку вопросов
Ну такого глюка в Delphi6 я еще не видел, что делать?
Прог
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;

К списку вопросов на форуме Программирование

>>