procedure TForm1.Button1Click(Sender: TObject);
var
  x: integer ;
  p: ^integer ;
begin
  new(p) ;
  x := 10 ;
  p^ := x ;   // 指针内存地址与x 不一致
  p := @x ;   // 指针内存地址与x 对致
              //如果有 p:=@x ,Dispose(p)会提示错误的指针操作
  Dispose(p);
end;是不是指针都用在 Record 记录中?
关于指针的内存分配释放有哪些注意事项?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      x: integer ;
      p: ^integer ;
    begin
      new(p) ;
    ShowMessage(Format('p当前指向地址:%d',[integer(p)]));
      x := 10 ;
      p^ := x ;
      ShowMessage(Format('p当前指向地址:%d',[integer(p)]));
      p := @x ;   // 执行了这一句,你的指针p所指向的地址就变成了x的地址
      ShowMessage(Format('p当前指向地址:%d;x的地址%d',[integer(p),integer(@x)]));  Dispose(p);   //因为你改变了p的指向,所以此时你调用dispose是错误的
    end;我在你的代码中加了几句,你可以看看指针并不一定都用在record中,他仅仅指向一个地址
      

  2.   

    这个问题我也碰到过,那如果前面new了之后,该怎么处理呢?