Разбираюсь с переводом ПС под ARC (под андроидом), где-то что-то ломается.
При вызове
curr := TPSTypeRec.Create(self);
constructor TPSTypeRec.Create(Owner: TPSExec);
begin
inherited Create;
FRefCount := 3;
FAttributes := TPSRuntimeAttributes.Create(Owner);
end;
constructor TPSRuntimeAttributes.Create(AOwner: TPSExec);
begin
inherited Create;
FAttributes := TPSObjectList.Create;
FOwner := AOwner;
end;
в _ClassCreate для TPSTypeRec выделяется память, все нормально. В конструкторе доходит до строки FAttributes := TPSRuntimeAttributes.Create(Owner);
Затем то же самое идет для TPSRuntimeAttributes, заходит в конструктор TPSRuntimeAttributes, подходит к строке FAttributes := TPSObjectList.Create;
И выделяет память на него - с указателем тем же, что в Self в конструкторе TPSTypeRec. Получается 2 объекта с одним указателем.
Память первого объекта (да и сам объект) перед этим не освобождается. И поблизости от этого адреса тоже.
Перед этим, при ините создается еще одна переменная TPSTypeRec, но там такого нет. Что-то ломается по пути, но что именно и где - непонятно, я даже не могу понять куда копать. Пока из твердых зацепок - вот это 100% повторяемое двойное выделение памяти.
Подскажите, в какую сторону копать?
Delphi 10.3.2, если что.