Delphi 3内存分配问题
我一定很想丢东西吗?我正在尝试在Delphi 3应用程序中创建链接列表.
这是通过两个ItemList和Item实现的. ItemList在表单创建时实例化.它持续到形式的生命.每个Item对象都根据需要进行实例化.该表单有一个名为AddAcc的函数.通过其中一个窗体控件的on-change事件调用AddAcc. 在此次变更事件中会发生什么: >调用AddAcc 我测试过AddItem,效果很好.我的问题是每次调用* AddAcc *它都会获得相同的内存位置.我尝试了不同的方法来创建一个新的Item对象.我使用了New,GetMem(w / FillChar),并实例化了Item类型的局部变量.对AddAcc的所有调用都会导致获得相同的内存位置. 我直接(通过引用)将Item对象传递给AddItem,并且还传递了一个指向Item对象的指针. 我认为链接列表中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; 任何帮助是极大的赞赏. 解决方法
这是我写一个链表的方法:
type PItem = ^TItem; TItem = record Next: PItem; Data: Integer; end; procedure Add(var First: PItem; Data: Integer); var NewItem: PItem; begin New(NewItem); NewItem.Next := First; NewItem.Data := Data; First := NewItem; end; ... var First: PItem; begin First := nil; Add(First,42); //etc. end; 当您需要取消分配列表时,请执行以下操作: var Item: PItem; begin while Assigned(First) do begin Item := First; First := Item.Next; Dispose(Item); end; end; 我相信这是在Pascal中编写链表类型代码的规范方式. 我故意为可以想象的这个最简单的链表编写这段代码.这使您可以专注于分配,使用指针等.您似乎已经知道如何在更复杂的列表中维护引用,因此我相信您可以轻松地根据您的需要调整这种代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |