var
  PXYPoint:TPXYPoint ;
  i:Byte ;
begin
  GetMem(PXYPoint,SizeOf(TXYPoint)*4);
  PXYPoint^.X :=(3/0.1)*5+25; //175
  PXYPoint^.Y :=(4.8/0.1)*5+25;//265;
  Inc(PXYPoint);
  PXYPoint^.X :=(4.5/0.1)*5+25; //250
  PXYPoint^.Y :=(8.9/0.1)*5+25;  //470
  Dec(PXYPoint);
  for  i:= 1 to 2 do
  begin
      ShowMessage(FloatToStr (pxyPoint.X ));
      ShowMessage(FloatToStr(pxypoint.Y ));
      if i<2 then
      Inc(PXYPoint );
  end;
  FreeMem(PXYPoint);//一写这句话,就报无可用指针地址错误,可是我明明用GetMem分配内存的啊,为什么不需要释放呢?想不通啊
end;

解决方案 »

  1.   

    FreeMem(PXYPoint,SizeOf(PXYPoint^)*4);
      

  2.   


    var
      i:Byte;
      PXYPoint:TPXYPoint;
    begin
      GetMem(PXYPoint,SizeOf(TXYPoint)*4);
      PXYPoint^.X :=(3/0.1)*5+25; //175
      PXYPoint^.Y :=(4.8/0.1)*5+25;//265;
      Inc(PXYPoint);
      PXYPoint^.X :=(4.5/0.1)*5+25; //250
      PXYPoint^.Y :=(8.9/0.1)*5+25; //470  Dec(PXYPoint);  for i:= 1 to 2 do
      begin
        ShowMessage(FloatToStr (pxyPoint.X ));
        ShowMessage(FloatToStr(pxypoint.Y ));
        if i<2 then
          Inc(PXYPoint);
      end;  Dec(PXYPoint);
      FreeMem(PXYPoint,SizeOf(PXYPoint^)*4);
    end;
      

  3.   

      Dec(PXYPoint);           //  多加一行语句
      FreeMem(PXYPoint,SizeOf(PXYPoint^)*4);