Я, должно быть, упускаю что-то довольно простое? Я пытаюсь создать связанный список в приложении Delphi 3.
Это реализуется через два класса ItemList и Item . ItemList создается при создании формы. Это сохраняется для жизни формы. Каждый Item объект создается по мере необходимости. Форма имеет функцию с именем AddAcc . AddAcc вызывается с помощью события on-change одного из элементов управления формы.
Что происходит во время этого события при изменении:
- AddAcc называется
- AddAcc создать новый Item object
- AccAdd вызывает ItemList.AddItem и передает Item по ссылке
- AddItem мест Элемент объект в конце списка
Я протестировал AddItem , и он работает хорошо. Моя проблема в том, что каждый раз, когда вызывается * AddAcc *, он получает одно и то же место в памяти. Я пробовал разные способы создания нового объекта Item . Я использовал New, GetMem (w / FillChar) и создавал локальную переменную типа Item. Все вызовы AddAcc приводят к получению одной и той же ячейки памяти.
Я передал объект Item напрямую (по ссылке) в AddItem и альтернативно передал указатель на объект Item .
Я думал, что ссылка (указатель) на экземпляр объекта Item в связанном списке обеспечит сохранение местоположения элемента в памяти. Однако, похоже, что он собирается после выхода из класса AddAcc .
FUNCTION AddAcc;
Var
accItem : ptrItem;
BEGIN
GetMem(accItem, sizeOf(Item));
FillChar(accItem^, sizeof(Item), 0);
ItemList.AddItem(accItem^);
End;
Procedure TItemList.AddItem(Var newItem : TAccessoryItem);
begin
Inc(_count);
// add first item to the list
If (_count = 1) Then
begin
_fifoHead := @newItem;
_tail := @newItem;
newItem.Next := @_tail;
newItem.Previous := @_fifoHead;
exit;
end;
_tail^.Next := @newItem;
newItem.Previous := _tail^;
mewItem.Next := @_tail;
_tail := @newItem;
end;
Любая помощь очень ценится.