我想实现两个指针内容的复制。复制后显示目的指针显示内容正常。但如果我释放掉源指针,目的指针内容就为空。为什么??????????????。代码如下unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
//定义的结构
Test = ^TTest;
TTest = Record
Text: String;
end; TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
t: test;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
new(t);
t.text := '111';
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Dispose(t);
end;procedure TForm1.Button1Click(Sender: TObject);
var tmp: test;
begin
new(tmp);
tmp.text := '222';
CopyMemory(t, tmp, Sizeof(TTest));
//这时t.text内容为‘222’
Dispose(tmp);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
//释放tmp后,t.text内容为空。为什么????
showmessage(t.text);
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
//定义的结构
Test = ^TTest;
TTest = Record
Text: String;
end; TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
t: test;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
new(t);
t.text := '111';
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Dispose(t);
end;procedure TForm1.Button1Click(Sender: TObject);
var tmp: test;
begin
new(tmp);
tmp.text := '222';
CopyMemory(t, tmp, Sizeof(TTest));
//这时t.text内容为‘222’
Dispose(tmp);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
//释放tmp后,t.text内容为空。为什么????
showmessage(t.text);
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
//定义的结构
Test = ^TTest;
TTest = Record
Text: String;
end; TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
//Button1: TButton;
//Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
t: test;
procedure Clone(src,target:Test);
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
new(t);
t.text := '111';
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Dispose(t);
end;procedure TForm1.Button1Click(Sender: TObject);
var tmp: test;
begin
new(tmp);
tmp.text := '222';
//CopyMemory(t, tmp, Sizeof(TTest));
self.Clone(tmp,t);
//这时t.text内容为‘222’
Dispose(tmp);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
//释放tmp后,t.text内容为空。为什么????
showmessage(t.text);
end;procedure TForm1.Clone(src, target: Test);
begin
target.Text:=src.Text;
end;end.
CopyMemory(pChar(t.text), pChar(tmp.text), Sizeof(TTest));或者结构中不用string类型。
TTest = Record
Text: array[0..10] of char;
end; CopyMemory(t,tmp,sizeof(TTest));
var tmp: test;
begin
new(tmp);
tmp.text := '222';
CopyMemory(t, tmp, Sizeof(TTest));
//这时t.text内容为‘222’
Dispose(tmp); 这一句改为tmp := nil;试试
end;