tr = record
  data:pointer;
  id:integer;
st:string;
PPT = ^tr;TPM = class
  Pid:Word;
  DataList:THashedStringList;
  constructor Create;
  destructor Destroy; override;
end;
destructor TPM.Destroy; //这个函数经常出错,不知道如果释放THashedStringList里的数据
var
  I:Integer;
  p:PPT;
begin
  for I := 0 to DataList.Count - 1 do
  begin
    p:= PPT(DataList.Objects[I]); //DataList添加的数据例子如:DataList.addObject('11',PPT) 添加的是PPT类型
    FreeMemory(PPacket^.Data);
  end;
  DataList.Free;
end;

解决方案 »

  1.   

    不用释放PPT结果中的data指针的内存空间?
      

  2.   

    要看你是如何对DataList当中的成员数据进行初始化的。
      

  3.   

    PPacket 是哪儿来的?内存管理遵循系统分配,系统释放; 手动分配,手动释放
    需要这两个函数配对出现
      GetMemory();
      FreeMemory();
      

  4.   

    tr = record 
      data:pointer; 
      id:integer; 
    st:string; 
    PPT = ^tr; TPM = class 
      Pid:Word; 
      DataList:THashedStringList; 
      constructor Create; 
      destructor Destroy; override; 
    end; //////////// 这里是添加数据
    var
     p:PPT;
     PM:TPM;
    new(P);
    p^.Data := AllocMem(256);
    PM.DataList.addObject('11',Tobject(p));
    /////////////destructor TPM.Destroy; //这个函数经常出错,不知道如果释放THashedStringList里的数据 
    var 
      I:Integer; 
      p:PPT; 
    begin 
      for I := 0 to DataList.Count - 1 do 
      begin 
        p:= PPT(DataList.Objects[I]); //DataList添加的数据例子如:DataList.addObject('11',PPT) 添加的是PPT类型 
        FreeMemory(p^.Data); 
      end; 
      DataList.Free; 
    end;
      

  5.   


    destructor TPM.Destroy; //这个函数经常出错,不知道如果释放THashedStringList里的数据 
    var 
      I:Integer; 
      p:PPT; 
    begin 
      for I := 0 to DataList.Count - 1 do 
      begin 
        p:= PPT(DataList.Objects[I]); //DataList添加的数据例子如:DataList.addObject('11',PPT) 添加的是PPT类型 
        FreeMemory(p^.Data); 
        Dispose(P);
      end; 
      
      DataList.Free; 
    end;
      

  6.   

    到底是read还是write?地址是多少?