在记录中有字符串变量,用指针时总是出错,如何解决?type
MapPointer = ^MapRecord;
MapRecord = record
pre : MapPointer;
next : MapPointer;
Value : String;
end;如何给value赋值,并且能正确的把值取出来。
MapPointer = ^MapRecord;
MapRecord = record
pre : MapPointer;
next : MapPointer;
Value : String;
end;如何给value赋值,并且能正确的把值取出来。
解决方案 »
- 复制文件并显示进度 Delphi
- Application.ProcessMessages是做什么的?
- 用idftp上传文件产生不可删除文件
- 谁考过系统管理员!有没有什么经验可以教给小弟的!
- 有喜欢Chage&Aska歌的来顶一下!
- 如何在Panel中显示菜单的提示
- 招聘:软件开发(成都)
- 急·!怎么选择一个区域,然后可以进行复制,粘贴?
- Paramstr如何正确处理带空格的参数?
- 如何安装infopower2000 3000,
- 我不想用Rave5自带的报表预览界面,好难看,请问能否自己定制报表预览界面?如何定制?
- 一个关于自定义类的问题!请高手指点.property Items[Index: integer]:TMyClass read GetItems write SetItems;报错??????为什么!
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;
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;
改成new(tmp)
type
MapPointer = ^MapRecord;
MapRecord = record
pre : MapPointer;
next : MapPointer;
Value : String[200];
end;
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环境。
多增加几个节点后,从头遍历链表,发现取出来的值不正确。
有时候增加几个节点后,再增加就出现地址错误了。请各位高手指点。谢谢。