好象那个TEMP要做全局变量才行
解决方案 »
- delphi 让fieldbyname('均价').AsCurrency:=fieldbyname('总金额').AsCurrency/fieldbyname('总数量').AsCurrency通过
- stringgrid使用的几个问题
- 请问如何实现监控所有已通讯的url?
- 如何在delphi中定制浏览器,功能类似于腾讯或者轻骑兵,最好有源代码,用于学习
- 请问如何实现QQ那中:有消息好友头像就上下动,这个是不是listview?
- 多文件处理
- 用indy的UDP传输视频,怎么知道传输的时间啊
- Delphi 如何在文本文件中删除指定的文本内容(需要保存原来文本文件内容)
- 要读注册表中的数据,已下程序那有错,请高手指点!
- 请教一个BDE问题!
- 请帮忙看一下
- 哪位知道原子的API?做什么的?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type MyRec = Record //声明一个记录类型
S1 : PChar;
S2 : PChar;
end;
PMyRec = ^MyRec; //声明一个指向记录类型的指针 ArrayInt = array [0..1] of integer; //声明一个整数数组
PInt = ^ArrayInt; //声明一个指向数组的指针 TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
function SetRecValue : PMyRec; //函数返回一个记录类型的指针
procedure GetRecValue; //通过SetRecValue返回的指针获取记录各域的值 function SetIntArrayValue : PInt; //函数返回一个静态数组的指针
procedure GetIntArrayValue; //通过调用SetIntArrayValue返回数组的各元素值.
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.GetIntArrayValue;
var
b : ArrayInt;
begin
b := SetIntArrayValue^;
Label1.Caption := IntToStr(b[1])+ ' ' + IntToStr(b[0]);
end;function TForm1.SetIntArrayValue: PInt;
var
a : ArrayInt;
begin
a[0] := 111;
a[1] := 234;
Result := @a;
end;procedure TForm1.GetRecValue;
var
Temp : MyRec;
begin
Caption := 'asdfasdf';
Temp := SetRecValue^; //获取函数返回值的内容.
Label1.Caption := StrPas(Temp.S1) + StrPas(Temp.S2);
end;function TForm1.SetRecValue: PMyRec;
var
Temp : MyRec;
begin
Temp.S1 := 'I am testing ';
Temp.S2 := 'the pointer!';
Result := @Temp;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
GetRecValue;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
GetIntArrayValue;
end;end.
请把声明换了吧
MyRec = Record //声明一个记录类型
S1 : array [0..200] of char;
S2 : array [0..200] of char;
别的地方不用动
var
Temp : MyRec;
begin
Temp.S1 := 'I am testing ';
Temp.S2 := 'the pointer!';
Result := @Temp;
end;这个函数中,你的 Temp 是局部变量,该函数执行完毕以后,Temp 会被释放掉,这样你在函数procedure TForm1.GetRecValue;
var
Temp : MyRec;
begin Temp := SetRecValue^; //获取函数返回值的内容.
Label1.Caption := Temp.S1 + Temp.S2;
end;中的 Temp := SetRecValue^; 就变得无效了,此时Temp 的两个结构体 S1 和 S2已经被释放掉了。解决办法:1. 定义 Temp : MyRec; 为全局变量2. 让编译器不释放 Temp,即定义一个指针:Temp: PMyRec,然后用 New 分配,这时只要你不用 Dispose ,那么编译器就不会自动释放