var 
p:^integer;
i:integer;
begin
try
new(p);
i:=100;
p:=@i;//dispose会出错,出错的原因我理解。请问我应该怎么样释放P呢?谢谢。很弱智的问题:(
finally
dispose(p);
end;
end;

解决方案 »

  1.   

    当你更改P的指针位置时,需要把P初始化时的地址保留下来,存在一个地址变量中,想释放P原来的内存空间时,释放那个保存原来P地址的变量就行了
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      p: ^integer;
      i: integer;
    begin
      try
        new(p);
        i:= 100;
        showmessage(inttostr(Integer(p)));
        p^:= i;//改成p:= @i;再看看就明白了。
        showmessage(inttostr(Integer(p)));
      finally
        dispose(p);
      end;
    end;
      

  3.   

    new(p); 分配了一个int型的内存空间
    p:=@i; 放弃分配的内存空间,将指针指向i的地址
    dispose(p); 试图释放p指向的地址,实际为i的地址,当然错,错的一塌糊涂,乱七八糟
      

  4.   

    如果是这样就不要再为P申请空间了,直接指向i变量的地址就好了.
    var 
      p:^integer;
      i:integer;
    begin
        i:=100;
        p:=@i;
    end;