当然会出错,你释放了两次。执行了代码newperson2:=newperson1;后,指针newperson2已经指向了newperson1,执行dispose(newperson1);
已经把指针指向的内容释放了,再释放就会出错。

解决方案 »

  1.   

    同意楼上的,因为它只是把newperson2的指针指向newperson1的位置,并没有复制过来,所以释放了newperson1时newperson2所指的地方也就释放了
      

  2.   

    同意楼上你虽然初始化了newperson2,但你又把它指向newperson1,释放newperson1后newperson2也释放了
      

  3.   

    你上面的代码比较危险,因为你为newperson2分配了内存,然后又将newperson2指向了
    newperson1的内存,这样newperson2指向的内存就不会被释放掉,正确的代码应该是:  new(newperson1);
      new(newperson2);  newperson1^.num :=1;
      newperson1^.name :='abc';  newperson2^:=newperson1^;    //这里同你的代码不同
      edit1.Text := inttostr(newperson2^.num);
      edit2.Text := newperson2^.name;  dispose(newperson1);
      dispose(newperson2);