zoukankan      html  css  js  c++  java
  • 关于TList操作及释放的问题

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

    PGoodsInfo = ^GoodsInfo;
          GoodsInfo 
    = record
             ID : 
    string;
             Name : 
    string;
             Number : 
    string;
          end;

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

    var
             GoodsList : TList;
             P:PGoodsInfo;
          begin
             GoodsList :
    = TList.Create;
             New(P);
             P
    ^.ID := '****';
             P
    ^.Name := '*****';
             P
    ^.Number := '*****';
             GoodsList.Add(P);
          end;

          下面是错误的释放代码

    var
        i:Integer;
    begin
        
    for i := 0 to GoodsList.Count - 1 do
        begin
            Dispose(GoodsList.Items[i]); //这会造成内存泄漏
        end;
        GoodsList.Clear;
    end;

          正确的释放代码

    var
        i:Integer;
        PGoods: PGoodsInfo;
    begin
        
    for i := 0 to GoodsList.Count - 1 do
        begin
            PGoods :
    = GoodsList.Items[i];
            Dispose(PGoods);

        end;
        GoodsList.Clear;
    end;

          我想正是因为程序不知道指针所对应的数据类型才会造成内存泄漏,指出就可以啦。望大家吸取教训。
  • 相关阅读:
    需求用例分析之七:业务用例之小结
    [Hibernate开发之路](4)ID生成策略
    Selenium基于Python 进行 web 自动化测试
    四个修改Docker默认存储位置的方法
    centos中文字符集,中文日志
    LVS管理工具ipvsadm详解与LVS-NAT模式演示
    mysql查看锁表情况
    centos7使用kubeadm配置高可用k8s集群
    LVS+keepalived+nginx+tomcat
    LVS_DR模式构建配置
  • 原文地址:https://www.cnblogs.com/sonicit/p/827105.html
Copyright © 2011-2022 走看看