E
erhe
Здравствуйте.
Вопрос, видимо, чисто академический, но мне немного неприятно
Имеется консольное приложение написанное на Дельфи 7. Оно обрабатывает входные данные и, если всё хорошо, формирует выходной файл. Или записывает ошибки, чтобы пользователь мог их обработать и повторить обработку.
Данные прогоняются через множество проверок. Для пары проверок был написан такой код (упрощаю, оставляю только нужное):
Эти функции вызываются последовательно и только тогда, когда в списке есть данные. Т.е., всегда AList.Count >= 1.
К чему пост. Через пару месяцев потребовалось поменять зашитую в приложение константу -- так сделано специально, чтобы ушлые пользователи не могли жульничать. Поменял значение константы, нажал "Save", потом "Build". И получил при работе ошибку в Fun1():
при первом присваивании -- выход индекса на границы массива.
Запустил в отладчике: да, в списке есть 1 значение; да, TMyClass().DateR -- возвращает в отладчик значение, но присваивания не происходит. Причем! Если закомментировать вызов Fun1() и сразу пойти в Fun2() -- всё работает на тех же данных!
Ладно, посколько время не ждет, сделал изврат и обошел случай 1 элемента через if. Через пару месяцев снова поменял значение константы и, поскольку время было, вернул код к первоначальному без извращенного if -- всё работает.
А потом было ещё веселее. Поменяли значение константы -- не работает. Вернули на то, что было -- не работает. Снова поставили нужное значение и после 4-5 нажатия на build -- заработало.
Такое ощущение, что Дельфи 7 на одних и тех же исходниках собирает разные exe-шки! Бред просто какой-то...
Кто стаким сталкивался или знает как лечить? Грустно наступать на грабли в отлаженном коде...
Вопрос, видимо, чисто академический, но мне немного неприятно
Имеется консольное приложение написанное на Дельфи 7. Оно обрабатывает входные данные и, если всё хорошо, формирует выходной файл. Или записывает ошибки, чтобы пользователь мог их обработать и повторить обработку.
Данные прогоняются через множество проверок. Для пары проверок был написан такой код (упрощаю, оставляю только нужное):
Код:
function Fun1(const AList: TStringList): Boolean;
var
dd: TDateTime;
i: Integer;
begin
dd := TMyClass(AList.Objects[0]).DateR;
. . .
end;
function Fun2(const AList: TStringList): Boolean;
var
dd: TDateTime;
i: Integer;
begin
dd := TMyClass(AList.Objects[0]).DateDr;
. . .
end;
К чему пост. Через пару месяцев потребовалось поменять зашитую в приложение константу -- так сделано специально, чтобы ушлые пользователи не могли жульничать. Поменял значение константы, нажал "Save", потом "Build". И получил при работе ошибку в Fun1():
при первом присваивании -- выход индекса на границы массива.
Запустил в отладчике: да, в списке есть 1 значение; да, TMyClass().DateR -- возвращает в отладчик значение, но присваивания не происходит. Причем! Если закомментировать вызов Fun1() и сразу пойти в Fun2() -- всё работает на тех же данных!
Ладно, посколько время не ждет, сделал изврат и обошел случай 1 элемента через if. Через пару месяцев снова поменял значение константы и, поскольку время было, вернул код к первоначальному без извращенного if -- всё работает.
А потом было ещё веселее. Поменяли значение константы -- не работает. Вернули на то, что было -- не работает. Снова поставили нужное значение и после 4-5 нажатия на build -- заработало.
Такое ощущение, что Дельфи 7 на одних и тех же исходниках собирает разные exe-шки! Бред просто какой-то...
Кто стаким сталкивался или знает как лечить? Грустно наступать на грабли в отлаженном коде...