问一个怪或不怪问题,对DELPHI编译了解的进来
边缘998 2009-03-29 10:33:27 大家都知道对象创建之后要FREE,这是个习惯.
如aLst:=TList.Create;
tmp:TXXX.Create;
aLst.add(tmp);
TXXX(aLst[0]).Free;
aLst.free;
正常,这个大家应该都没问题吧.
近日,我用ROMOBJ,和IO,我发现它的DAO机制,感觉有些不对,但我又解释不了,他的底层我猜想也是用LIST来添加对象.
它是这样的,
XXDAO:TXXXX类,类里面有个ADDITEM方法,用来添加对象的.
代码如下:
XXDAO:=TXXXX.Create;
for i:=1 to 2 do
begin
tmpSubDao:=TsubXXX.Create;
tmpSubDao.属性:=赋值;
XXDAO.ADDITEM(tmpSubDao);
tmpSubDao.free
end;
XXDAO.Free;
问题:同样在XP SP2下两台机测试,红色部分如果注释了,两台机执行XXDAO.FREE均没问题,但这样会有内存泄漏,但如果不注释
则有这样的反应,A机正常,B机在XXDAO.Free;时报错,错什么呢,提示地址出错.无语了,
我现在怀疑两台机装上DELPHI后,默认的编译指令不同导致内存检则不同.但又无从下手,望高手出招,替小弟干掉.