Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.14.130.24] |
|
Сообщ.
#1
,
|
|
|
Я что-то не понял: Не писал на Delphi год. Сейчас потребовалось. Поставил сразу v.7 (до этого юзал 5-ую и горя не знал). Простецкая прога вылетает по непонятной причине.
Стал копать и что я вижу? Вот кусок кода: .... Const MaxCnt=5; Var MyComSpr:Array[0..MaxCnt-1] Of Boolean; ... Implementation ..... Procedure ReopenDT; Var MyCnt:Integer; WasOpen:Boolean; Begin ... For MyCnt:=0 To MaxCnt-1 Do Begin WasOpen:=MyComSpr[MyCnt]; ....... End; //For MyCnt ... End; //ReopenDT Ставлю ВreakРoint на строку перед "For MyCnt...", пускаюсь, вываливаюсь в отладчик и трассирую. Слежу за переменной MyCnt. Перед циклом MyCnt=0. Нормально. После отработки первого же For (т. е. на строке WasOpen...) вижу "MyCnt=5"??!!!!. Не понял. И далее УМЕНЬШАЕТСЯ до 1!? Далее. Пишу вместо "To MaxCnt-1" явно: "To 4". Тот же глюк. И так и в остальных циклах. Что это??? |
Сообщ.
#2
,
|
|
|
по-моему, это в настройках компилятора (или бильдера) опции выставляются (непомню )
может кто вспомнит ??? |
Сообщ.
#3
,
|
|
|
Отмени оптимизацию в настройках компиллятора
|
Сообщ.
#4
,
|
|
|
Отменял оптимизацию в компиляторе. Включал Pentium-safe FDIV, проверку стека и т. п. Выключал машину на несколько минут. Не спасло. Переделал код внутри цикла. Походу глюк был там (что-то я с указателями намудрил, сделал по другому и все ОК, почему не работало раньше - так и не понял. Ну и ладно).
Сдается мне, что Delphi просчитывает цикл раньше (или одновременно), чем я выпадаю в отладчик. И показывает мне значение счетчика при выходе из цикла. Но тогда я не понял, зачем он начинает его минусовать? В других циклах ошибок не было (просто негде было им взяться), просто этот (который в примере) запускался раньше других. Как поборол глюк в цикле - так и остальные заработали. Ладно. Пока все работает. Спасибо. |