一个功能中把类的对象的指针存入一个数据结构中,出现了内存访问的异常,如果把类换成记录就好了,请问这是什么原因啊?下面是那个类,(是别人写的,不知道为什么非要用类,而不用记录):type
TCard =class(TObject)
public
Index :Integer;
TPID :Integer;
MName :String;
MAttr1 :String;
MAttr2 :String;
MField :String;
MAttr3 :String;
end;procedure TForm1.Button1Click(Sender: TObject);
var
ActionList :TList;
ARecord :^TCard;
Size : integer;
begin
ActionList := Tlist.Create;
New(ARecord); //是不是这里出了问题?
Size := Sizeof(ARecord^);
showmessage('ARecord: '+inttostr(Size)); {如果是类,大小是4,错了;如果是记录,大小是28,对的}
ARecord^.Index := 1;
ARecord^.TPID := 3; //在这里就出现异常了
ARecord^.MName := '左移';
ARecord^.MAttr1 := '8000';
ARecord^.MAttr2 := '2';
ARecord^.MField := 'LMR';
ARecord^.MAttr3 := '1500';
ActionList.Add(ARecord); New(ARecord);
ARecord^.Index := 2;
ARecord^.TPID := 3;
ARecord^.MName := '下降';
ARecord^.MAttr1 := '6500';
ARecord^.MAttr2 := '1';
ARecord^.MField := 'PTS';
ARecord^.MAttr3 := '1500';
ActionList.Add(ARecord); New(ARecord);
ARecord^.Index := 3;
ARecord^.TPID := 7;
ARecord^.MName := '减速';
ARecord^.MAttr1 := '8500';
ARecord^.MAttr2 := '1';
ARecord^.MField := 'DTS';
ARecord^.MAttr3 := '1500';
ActionList.Add(ARecord);
end;
把那个类换成这样的记录就好了,只是把类换成记录
type
TCard =record
Index :Integer;
TPID :Integer;
MName :String;
MAttr1 :String;
MAttr2 :String;
MField :String;
MAttr3 :String;
end;
大家帮忙看看,谢谢啊~
ARecord.Create;
吧?
但是类不能用New,要用TCard.Create
另外记得不管你是用Record还是Class都要自己释放
TList不会替你释放
我一般是自己继承一个TList然后重载Notify方法释放
D7自己带有一个TObjectList类也会自己释放Item指向的类
var
ActionList :TList;
ARecord : TCard;
Size : integer;
begin
ActionList := Tlist.Create;
ARecord := TCard.Create;
ARecord.Index := 1;
ActionList.Add(ARecord);
.....
中,其中定义为TCard的对象,已经是指针(引用)了!