P1:Pointer;
P2:Pointer;
怎么把P1赋值给P2,然后把P1释放掉

解决方案 »

  1.   

    指针,就是一个内存区域的指向。P1原来指向的内存释放掉了,就是被回收了,回收后可能会再分配给其他变量使用。
    如果没被再分配,你通过P2怎么读写都没事的;
    如果被再分配了,你通过P2读来的值可能是被别的代码修改过的;写了,就会导致别的代码出现莫名其妙的情况。再问,你还需要“怎么把P1赋值给P2,然后把P1释放掉”吗?
      

  2.   

    Lz需要的不是指针复制而是地址复制,move即可
      

  3.   

    GetMem(p2,SizeOf(p1));
    move(p1^,p2^,SizeOf(p1));
    貌似不行
      

  4.   

    GetMem(p2,SizeOf(p1));
    move(p1^,p2^,SizeOf(p1));
    貌似不行
      

  5.   

    这句代码跟下大小你就知道为什么不行了
    showmessage(inttostr(sizeof(p1)));
      

  6.   

    var
    P1:Pointer;
    P2:Pointer;
    s:PChar;
    begin
      s:='abc';
      P1:=s;
      GetMem(P2,SizeOf(P1));
      Move(P1^,P2^,SizeOf(P1));
      ShowMessage(PChar(p2));
      

  7.   

    var
    P1:Pointer;
    P2:Pointer;
    s:byte;
    begin
      s:=200;
      P1:=Pointer(@s);
      GetMem(P2,SizeOf(P1));
      Move(P1^,P2^,SizeOf(P1));
      ShowMessage(IntToStr(byte(p2^)));
    end;