我在程序里面用了很多结构体,并要把这些结构体保存在一个TLIST中,
   比如:
      PMsgToClient=^TMsgToClient
      TMsgToClient = packed record
        head: THead;
        sys_id: CodeArray;
        msg_id: Integer;
        MsgText: MsgArray;
      end;   在实际操作中我要定义一个PMsgToClient类型的全局变量,把TMsgToClient中的值赋过来,
   简单的方法是同样定义一个TMsgToClient的全局变量,然后复制,
   再
      new(PMsgToClient);
      PMsgToClient:=@TMsgToClient;
      list.add(PMsgToClient); 
      
   想问下有没有别的较好的方法,比如用move,在此多谢了

解决方案 »

  1.   

    可以
    Move(源指针,目标指针,sizeof(TMsgToClient))
      

  2.   

    PMsgToClient:=@TMsgToClient;这不对吧。给List 添加10个
    for i:=0 to 9 do 
      list.add(GetMemory(TMsgToClient ));
      

  3.   

    list.add(@TMsgToClient); 
    PMsgToClient:= list.item[0];
    直接这样用就可以
      

  4.   

    move是内存拷贝,开辟新内存来保存你的record,因为是全局变量,如果全局变量发生变化你list里面的内容是不变化的list.add(@TMsgToClient);在list内保存一个引用而已
      

  5.   

    hongqi162
    (失踪的月亮)
       代码里TMsgToClient这个往往是个函数中变量,地址空间在用完后也是要释放的吧,我使过这样,不过LIST中的值都是最后一次添加的数据,不知道是不是我写法的问题。
       所以我想把局部变量中的内容复制到我定义的全局变量中,每次new(),然后用LIST添加这个地址。
      

  6.   

       没想到会这么快就有回复~谢谢大家了 
       我试了下1楼的方法,是可以的,不过要再定义一个PMsgToClient,没有别的我就先用这个来解决了
       
      

  7.   

      PMsg=^TMsg;
      TMsg=packed record
        ksdm:string;
        czydm:string;
        czyxm:string;
      end;
    var
      Form1: TForm1;
      pm:PMsg;
    implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      msg:Tmsg;
    begin
      msg.ksdm:='0001';
      msg.czydm:='0019';
      msg.czyxm:='wander';
      new(pm);
      move(msg,pm^,sizeof(msg));
      showmessage(pm^.czyxm);
    end;  貌似这样也是可以,直接操作结构体
      

  8.   

    var
      p:PMsgToClient;
      msg:TMsgToClient;
    begin
      msg.msg_id:=100;
      new(p);
      move(msg,p^,sizeof(TMsgToClient));
      list.Add(p);
    end;