type
   ok=record
      a:integer;
      b:intger:
end;type
   Pok=^ok;var
   i:Pok;
begin
   现在我想通过i将ok记录的成员1赋值为3,我这样写i^.a:=3;运行以后内存报错,请问应该怎么通过
记录的指针i来对a赋值呢?

解决方案 »

  1.   

    type
        Pok=^ok;
        ok = record
           a:integer;
           b:integer;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
        i : Pok;
    begin
        New(i);
        i^.a := 12;
        ShowMessage(IntToStr(i^.a));
        Dispose(i);
    end;
    这样用,要申请内存的呀。记得释放内存
      

  2.   

    只有指针是不行的。
    必须分配内存空间。type
       ok=record
          a:integer;
          b:integer;
      end;
    type
       Pok=^ok;procedure TForm1.Button3Click(Sender: TObject);  
    var
       i:Pok;
    begin
      i := AllocMem(Sizeof(ok));
      try
        i.a := 3;
        i.b := 5;
        Showmessage(Format('i.a=%d,i.b=%d',[i.a,i.b]));
      finally
        FreeMemory(i)
      end;
    end;
      

  3.   

    var
       i:Pok;
    begin
      new(i); // 申请空间
      i^.a:=3;
      ....
      dispose(i);  //释放new 和 dispose 是pascal 遗留的操作符,现在建议使用类的方式,
    还有,new不能申请连续的内存实体空间,对于这点,建议使用GetMem和FreeMem来操作数组类的。
      

  4.   

    声明成指针就得自己控制内存。
    如果声明成常规变量就Delphi负责分配释放内存。
    不过下面可以不用分配内存。
    var
      xx:ok;
      yy:pok;
    begin
      yy:=@xx;
    end;