tet = class
ip:string;
end;te2 = record
ip:string;
end;我实现一个tet和te2,并对tet.ip赋值,并把这个值赋给te2.ip,然后我把te2插入一个Tlist中,使用时从Tlist取出te2,可以te2中的ip为空?这是为什么?

解决方案 »

  1.   

    ip这个元素为空对于te2这个结构本身来说又没影响的,为什么不行啊?你这个List存的是这个te2啊
      

  2.   

    te := tet.create('192.168.1.1');
    t:te2;
    t.ip := te.ip;
    TList.Add(@t);
    就是上面这样,但字符串会没了
    我后改成class就可以了,不知道为什么
      

  3.   

    t是局部变量吧?delphi的编译器不会在对record进行取地址操作的时候增加record中的string变量的引用计数,所以过程结束的时候就直接检查string的引用计数并清零了
    另外对局部变量中的record取地址并加到更久生存期的变量中极不安全(或者应该说永远不要这么做),因为record是在栈(stack)中分配的,随着程序的进行,已经结束的过程留在栈中的内容不可避免的会被其它过程破坏