先定义了一个自己的类 TMyClass (假设包括了一个 public ID:int64; )
企图用 TList 来管理一系列实例,代码逻辑如下:type
PMyClass=^TMyClass;
var
MyList:TList;
MyObject1:TMyClass;
MyObject2:TMyClass;
PMyObject:PMyClass;
AInteger:int64;
begin
MyList:=TList.create;
MyList.add(@MyObject1);
MyList.add(@MyObject2);
new(PMyObject);
PMyObject:=MyList.items[0];
AInteger:=PMyObject^.ID; //这一句编译没有错,但执行时读内存错误。
end;
企图用 TList 来管理一系列实例,代码逻辑如下:type
PMyClass=^TMyClass;
var
MyList:TList;
MyObject1:TMyClass;
MyObject2:TMyClass;
PMyObject:PMyClass;
AInteger:int64;
begin
MyList:=TList.create;
MyList.add(@MyObject1);
MyList.add(@MyObject2);
new(PMyObject);
PMyObject:=MyList.items[0];
AInteger:=PMyObject^.ID; //这一句编译没有错,但执行时读内存错误。
end;
MyObject1:=TMyClass.create;
MyObject2:=TMyClass.create;
AInteger:=PMyObject.ID; //这时就应好用了
MyList.add(MyObject1);
没有用@取得MyObject1的地址,结果可想而知,程序异常中断,读地址错误了!为这个问题还企图求助 TObjectList,甚至想自己编一个专门的MyClassList,后来突然想起了C++里面指针(谭浩强起了作用了),才发现了这个错误!!! :-)指针有时候真害人,幸好我不是企图去写地址,否则不知道会不会导致系统崩溃。