这样就不会出错:var
  bmp1,bmp2:TBitMap;
begin
  bmp1:=TBitMap.create;
//  bmp2:=TBitMap.create; 不要建立bmp2
  bmp1.loadfromfile('d:\zhong.bmp');
  bmp2:=bmp1;  //不会出错当建立了对象后你不能使用赋值符号将其指针指向另外一个对象,只能用Assigned。
而如果没有建立,可以使用=赋值,这时bmp2并不真正存在,只是指向bmp1的指针。

解决方案 »

  1.   

    调用create时在内存中为对象分配了一块区域存储对象的数据,
    当 AObj := BObj 时,实际上是把 AObj 指向了 BObj 的内存区域,如果 AObj 已经被 create, 这样会导致内存泄漏。这时他们任何一个调用 Free 后,再访问另一个的属性或函数就会出错。
    当 AObj.assign(BObj) 时,是把 BObj 的信息(数据、属性等)复制到 AObj 的内存区域中,这要求两个对象都必须已被创建,此后两个对象的动作互不相干。