Эти массивы передаются по значению, что означает, что они копируются в стек и передаются таким образом.Следовательно, ошибки переполнения стека.
Проблема решается путем задания параметров массива const
.В этом сценарии массив передается по ссылке, а не по значению.Другими словами, передается один указатель.
Как правило, при передаче (потенциально) больших структур, таких как массивы или записи, вы всегда должны передавать их по ссылке;используя const
, если метод, получающий их, не изменяет данные, и используя var
, если получатель делает.Это дает дополнительное преимущество: ваш код становится быстрее, потому что копировать данные не нужно.
Вероятно, вам следует изменить ваш метод следующим образом:
procedure TMain.THREAD_SYNC(
AProgressBar: TProgressBar;
const ARemoteData: array of RemoteDATA;
const ALocalData : array of LocalDATA;
Number : integer;
AInfo : TEdit);
Нет необходимости использовать const дляTProgressBar
или TEdit
, эти классы и классы хранятся в куче только со ссылкой на стек.