大家都知道TList即可用于链表,又可用于数组,最近在做项目时遇到点小问题(可能是我对指针了解的不透彻吧),造成了不大不小的问题,下面就说说是怎么回事。
      首先我先定义了Record及对应的指针类型。

关于TList操作及释放的问题PGoodsInfo = ^GoodsInfo;
关于TList操作及释放的问题      GoodsInfo 
= record
关于TList操作及释放的问题         ID : 
string;
关于TList操作及释放的问题         Name : 
string;
关于TList操作及释放的问题         Number : 
string;
关于TList操作及释放的问题      end;

      下面是定义变量及添加数据

关于TList操作及释放的问题var
关于TList操作及释放的问题         GoodsList : TList;
关于TList操作及释放的问题         P:PGoodsInfo;
关于TList操作及释放的问题      begin
关于TList操作及释放的问题         GoodsList :
= TList.Create;
关于TList操作及释放的问题         New(P);
关于TList操作及释放的问题         P
^.ID := '****';
关于TList操作及释放的问题         P
^.Name := '*****';
关于TList操作及释放的问题         P
^.Number := '*****';
关于TList操作及释放的问题         GoodsList.Add(P);
关于TList操作及释放的问题      end;

      下面是错误的释放代码

关于TList操作及释放的问题var
关于TList操作及释放的问题    i:Integer;
关于TList操作及释放的问题begin
关于TList操作及释放的问题    
for i := 0 to GoodsList.Count - 1 do
关于TList操作及释放的问题    begin
关于TList操作及释放的问题        Dispose(GoodsList.Items[i]); //这会造成内存泄漏
关于TList操作及释放的问题    end;
关于TList操作及释放的问题    GoodsList.Clear;
关于TList操作及释放的问题end;

      正确的释放代码

关于TList操作及释放的问题var
关于TList操作及释放的问题    i:Integer;
关于TList操作及释放的问题    PGoods: PGoodsInfo;
关于TList操作及释放的问题begin
关于TList操作及释放的问题    
for i := 0 to GoodsList.Count - 1 do
关于TList操作及释放的问题    begin
关于TList操作及释放的问题        PGoods :
= GoodsList.Items[i];
关于TList操作及释放的问题        Dispose(PGoods);

关于TList操作及释放的问题    end;
关于TList操作及释放的问题    GoodsList.Clear;
关于TList操作及释放的问题end;

      我想正是因为程序不知道指针所对应的数据类型才会造成内存泄漏,指出就可以啦。望大家吸取教训。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-27
  • 2022-12-23
猜你喜欢
  • 2021-08-25
  • 2022-12-23
  • 2022-12-23
  • 2022-03-06
  • 2021-07-04
  • 2022-12-23
  • 1970-01-01
相关资源
相似解决方案