Delphi Dynamic Array присваивает временную переменную локального динамического массива

У меня есть проблема с новой выпущенной Delphi 10.2, ошибка показа нового компилятора, когда

var 
  FGlobalVar: array of integer;

procedure SomeProc()
var
  ALocalVar: array of integer;
begin 
  ALocalVar := Pointer(FGlobalVar); {assign dynamic array}
  {Do Something}
end;

В предыдущей версии компилятор delphi не показывал никаких ошибок.

1 ответ

Решение

Этот код никогда не должен был компилироваться, и Токио закрывает дыру в петле. Проблема с этим приведением в том, что подсчет ссылок может быть обойден. Код, который у вас есть, не страдает от этой проблемы, но если приведение приведено в левой части назначения, ссылка не берется.

Pointer(LocalVar) := GlobalVar;

Написано так, LocalVar назначается ссылка на динамический массив, но счетчик ссылок не увеличивается. Я ценю, что ваш код написан не так, но я считаю, что именно по этой причине разработчики решили внести изменения.

В любом случае, нет необходимости в приведении, если вы используете типы, которые совместимы. Переключиться на TArray<Integer> и бросок не нужен. Кроме того, ваш код сможет взаимодействовать с универсальными методами.

Другие вопросы по тегам