повторное выделение той же памяти.

Vizit0r
Дата: 15.08.2019 09:08:18
Разбираюсь с переводом ПС под 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, если что.
Kazantsev Alexey
Дата: 15.08.2019 10:49:57
Vizit0r
Разбираюсь с переводом ПС под ARC

Скоро ARC выпилят отовсюду. Просто к сведению.
Vizit0r
Дата: 15.08.2019 11:04:17
насколько скоро?
krapotkin
Дата: 15.08.2019 11:11:12
через пару версий это не настолько скоро )))
попробовал разобраться в том что вы написали
у меня все работает предсказуемо, под каждый объект выделяется память, для каждого добавляется счетчик ссылок
Kazantsev Alexey
Дата: 15.08.2019 11:14:03
Vizit0r
насколько скоро?

Точных сроков, боюсь, даже у абракадабры нет, но цель в комментариях к роадмапу была озвучена более чем ясно.
Vizit0r
Дата: 15.08.2019 16:36:11
видимо придется забить.
Переводить код движка, где тонны объектов, как кастомных, так и стандарных, и все это перемешано с указателями - оказалось весьма неинтересно.
Вызов дельфийских функций через Invoke переписал, так что на маках и линухах будет работать, а мобильные платформы пусть ждут когда ARC уберут.