先定义了一个自己的类  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;

解决方案 »

  1.   

    MyList.add(@MyObject1);这一句中的MyObject1还没有创建,你怎么取地址?
      

  2.   

    不好意思,写漏了,实际是已经创建并初始化了:插入了:
    MyObject1:=TMyClass.create;
    MyObject2:=TMyClass.create;
      

  3.   

    你的思路没有错。PMyObject:=PMyClass(MyList.items[0]);
    AInteger:=PMyObject.ID;    //这时就应好用了
      

  4.   

    呵呵,大家都被我骗了,实际是可以如我所说那样用的。我第一次用TList的时候,ADD方法是这样用的:
    MyList.add(MyObject1);
    没有用@取得MyObject1的地址,结果可想而知,程序异常中断,读地址错误了!为这个问题还企图求助 TObjectList,甚至想自己编一个专门的MyClassList,后来突然想起了C++里面指针(谭浩强起了作用了),才发现了这个错误!!!  :-)指针有时候真害人,幸好我不是企图去写地址,否则不知道会不会导致系统崩溃。