我把记录动态数组类型申明成了全局变量,我想第二次再用它时有错误发生,不知道怎么解决呢?谢谢!

解决方案 »

  1.   

    用完后
    SetLength = 0
      

  2.   

    仍然有同样的错误发生。
    Access violation at address 004891A8
      

  3.   

    说具体些
    释放用 := nil
      

  4.   

    我是在A.PAS文件中调用B.PAS的函数(返回值为一个记录型的动态数组),在B.PAS中我把该记录申明成了全局的,在函数中动态分配该记录类型的数组.第一次返回可以显示,但当第二次调用该函数时却有Access violation at address 004891A8错误发生了.
      

  5.   

    DA : Array of ... ;
    你要这样写了
    setlength(DA,10)
      

  6.   

    //这文件包含了B.pasprocedure TForm1.Button1Click(Sender: TObject);  
    var
      aaa:person;
    begin
    ... 
    aaa:=tp.showperson();for i:=low(aaa) to high(aaa) do  //第一次按时返回正常的,再按一次就错停在这里
      begin
        showmessage(aaa[i].Name);
      end;//b.pas
    type
      rec_person=record
        name:string;
        age:integer;
      end;
      person=rec_person;function Tperson.Showperson():person;
    var
      indexofperson:integer;
      mperson:person;
    begin
        Setlength(mperson,0);
        indexofhistorylist:=0;
        SetLength(mperson,20);
        mperson[indexofperson].name:='jjj';
        mperson[indexofperson].age:=20;
        inc(indexofhistorylist);
        Result:=mperson;
    end;
    //-----------------------------------------------------------------
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      d : Array of String ;
      i : Integer ;
    begin
      SetLength(d,10) ;
      for i := 0 to 9 do
      begin
        d[i] := IntToStr(i) ;
        ShowMessage(d[i]) ;
      end;
      SetLength(d,0) ;
      ShowMessage(Pchar(d)) ;
    end;没错呀
      

  8.   

    type
      rec_person=record
        name:string;
        age:integer;
      end;你不过定一个记录而已,name 字段以字符串来用可以吗 ?
      

  9.   

    我想我是错在把记录类型的动态数组申明成了全局的,会不会是因为我申明时的问题?
    type
      rec_person=record
        name:string;
        age:integer;
      end;
      person=rec_person;
    是全局的,因为我试了,在另一个按钮中我又写了一样的代码,按了按钮一后,没错,按了按钮二就错了,而且错的地方也是老地方。