КОМПИЛЯТОР.Ошибка генерации кода при большом количестве констант
ПРОДУКТ
Delphi 4,5
ПЛАТФОРМА
procedure AnyProc(const S: string);
begin
...
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
AnyProc('1');
AnyProc('2');
...
AnyProc('4346');
AnyProc('4347');
end;
На строке 4347 Delphi 6 выдаст ошибку "Too many local constants. Use
shorter procedures". Delphi 4 сгенерирует неправильный код.
КомментарийПроверено (D5, WinNT4).
На строке '4347' код вызова AnyProc не
отличается от предыдущих - просто передается адрес очередной константы.
Ошибка в том, что константы уже закончились - было подготовлено
компилятором и загружено в образ программы только 4346 локальных
констант для AnyProc. И в следующих вызовах просто передается "мусор"
из памяти. Если в отладчике шагать дальше по этим вызовам (с заходом в
процедуру), то можно нарваться на Access Violation в User32.dll, после
чего сеанс отладки завершается ненормально и Delphi нуждается в
перезагрузке.
В D6, очевидно, эта ошибка исправлена, и превышение допустимого
количества констант обнаруживается на стадии компиляции.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.