我有一段代码:
type ta=record
   a:tstringlist;
   b:array of double;
   c:integer;
   end;var a1,a2:array of ta;...
a1:=....现在要复制a1到a2:采用a2:=copy(a1,0,high(a1));对a2的操作将会影响到a1,因为a1、a2使用同一地址,
如何解决这个问题呢:对a2操作不影响a1?

解决方案 »

  1.   

    a2:= a1;//这时引用,对a2的操作将会影响到a1。
    //a2:=copy(a1,0,high(a1));
    这是数组的完全拷贝啊!应该不会出现对a2的操作将会影响到a1吧?关注!
      

  2.   

    copy 应该没有问题的,
    是不是因为 a: tstringlist; ?
    这是一个对象,如果向你所说,我猜可能是 copy 没有重新创建一个 TStringList,
    而是将指针指向了它,等下我回去试试看。
      

  3.   

    昨天回去试了一下,这个问题不太好办,
    但要解决应该也可以办到。就是因为记录体内的数据又是一个指针。
    是这样的,动态数组本身是一个指针,其大小是动态分配的,
    你这个动态数组,是指向一个记录体,而你这个记录体内部,
    有两个数据域a 和 b又是一个指针,那么,在复制时,复制
    的是这两个指针所在的内存,而这个指针所指向的内存里面的内容
    并没有复制,所以,你那样复制a1到a2后,其中的a,b两个域并没有复制,
    就出现你说的a2会影响a1,可以定义两个变量,分别是a,b类型的,
    a,可以用TStingList.Assign复制对象,对于b,要重新分配内存和原
    数组一样大小的内存,应该可以实现。
      

  4.   

    时间不等人呀。我用最原始的办法,一个一个的复制,即数组内部也一个一个
    的复制,好像是:数组用copy,tstringlist用addstrings。
      

  5.   

    使用Copy 就可以的!会重新分配内存的!
    a2 := a1 两个是一个地址的!
    自己可以试试看!