我必須錯過一些相當簡單的東西嗎?我試圖在Delphi 3應用程序中創建一個鏈表。德爾福3內存分配問題
這是通過兩個類別項目列表和項目。 ItemList在表單創建時實例化。它堅持一生的形式。每個項目對象根據需要被實例化。該表格有一個稱爲AddAcc的功能。 AddAcc通過窗體控件之一的on-change事件調用。
本上改變事件中會發生什麼:
- AddAcc叫
- AddAcc創建一個新的項目對象
- AccAdd電話ItemList.AddItem和商品通過參考 個
- 的AddItem地方項目在
我測試過的AddItem和它運作良好列表的尾部對象。我的問題是,每次* AddAcc *被調用它獲得相同的內存位置。我試過用不同的方法創建一個新的項目對象。我使用了New,GetMem(w/FillChar),並實例化了一個Item類型的局部變量。所有對AddAcc的調用都會導致獲得相同的內存位置。
我直接傳遞的項目對象(通過引用)的AddItem和可選地通過一個指針項對象。
我認爲鏈接列表中的對象Item的實例的引用(指針)將確保項目的內存位置將被保持。然而,看起來,一旦退出類,它就會被收集起來。
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;
任何幫助,非常感謝。
請給我們一些代碼。一旦我們看到你的代碼,我們會告訴你它有什麼問題。 – 2011-03-05 12:48:49
請發佈調用AddAcc的代碼的代碼,AddAcc方法本身,聲明ListItem對象的代碼行以及初始化它的代碼行。基本上,聲明,初始化,AddAcc +至少有一個調用AddAcc的地方(以及調用它的方法的所有代碼,而不僅僅是調用它的代碼行) – 2011-03-05 12:49:04
我可以猜測你傳遞的地址是一個包含指針的局部變量。 – 2011-03-05 12:50:57