在记录中有字符串变量,用指针时总是出错,如何解决?type
  MapPointer = ^MapRecord;
  MapRecord = record
      pre : MapPointer;
      next : MapPointer;
      Value : String;
  end;如何给value赋值,并且能正确的把值取出来。

解决方案 »

  1.   

    type
      MapPointer = ^MapRecord;
      MapRecord = record
          pre : MapPointer;
          next : MapPointer;
          Value : ShortString;
      end;
    那你用ShortString代替。var tmp:MapPointer;
    begin
      getMem(tmp,sizeof(tmp^));
      tmp^.Value:='china';
    ......
      FreeMem(tmp);
    end;
      

  2.   

    不出错了,但是用ShortString怕有时候长度不够用,有没有更好的办法?
      

  3.   

    用stirng 不应该不对阿
    type
      MapPointer = ^MapRecord;
      MapRecord = record
          pre : MapPointer;
          next : MapPointer;
          Value : ShortString;
      end;var tmp:MapPointer;
    begin
      new(tmp,sizeof(tmp^));
      tmp^.Value:='china';
    ......
      dispose(tmp);
    end;
      

  4.   

    写错了new(tmp,sizeof(tmp^));
    改成new(tmp)
      

  5.   


    type
      MapPointer = ^MapRecord;
      MapRecord = record
          pre : MapPointer;
          next : MapPointer;
          Value : String[200];
      end;
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    type
      MapPointer = ^MapRecord;
      MapRecord = record
          pre : MapPointer;
          next : MapPointer;
          Value : String;
          no : integer;
      end;var
      Form1: TForm1;
      up_list,up_pointer : MapPointer;
      ui_no : Integer;
    implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      ui_no := 1;
      //创建双向链表
      //GetMem(up_list,sizeof(MapRecord));
      new(up_list);
      up_list^.pre := up_list;
      up_list^.next := up_list;
      up_list^.value := 'a1';
      up_list^.no := ui_no;  new(up_pointer);
      up_pointer := up_list;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      lp_temppointer : MapPointer;
      ls_text : String;
    begin
      //增加一个节点
      ui_no := ui_no + 1;  new(lp_temppointer);  lp_temppointer^.pre := up_pointer^.next;
      lp_temppointer^.next := lp_temppointer;
      ls_text := 'a' + IntToStr(Ui_no);  lp_temppointer^.value := ls_text;
      lp_temppointer^.no := ui_no;  up_pointer^.next := lp_temppointer;  up_pointer := lp_temppointer;  Dispose(lp_temppointer);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      //up_pointer指向第一个节点
      up_pointer := up_list;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      //up_pointer指向前一个节点
      up_pointer := up_pointer^.pre;
      Button5Click(Sender)
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
      //up_pointer指向后一个节点
      up_pointer := up_pointer^.next;
      Button5Click(Sender)
    end;procedure TForm1.Button5Click(Sender: TObject);
    begin
      //显示当前节点的值
      Edit1.Text := up_pointer^.Value;
      Edit2.Text := IntToStr(up_pointer^.no);
    end;end.delphi7环境。
    多增加几个节点后,从头遍历链表,发现取出来的值不正确。
    有时候增加几个节点后,再增加就出现地址错误了。请各位高手指点。谢谢。