CnPack Forum » CnVCL 组件包 » CNSqlite中有内存泄露


2008-1-9 15:46 mymousecat
CNSqlite中有内存泄露

只简单的使用下列代码:
var
   db:TLiteDB;
begin
  db:=TLiteDB.Create();
  db.Free;
end;

用CheckMem生成的报告如下:

===== Project5.exe,2008/1/9 15:41:09 =====
     可用地址空间 : 1280 KB(1310720 Byte)
       未提交部分 : 0 KB(0 Byte)
       已提交部分 : 1280 KB(1310720 Byte)
         空闲部分 : 1277 KB(1307756 Byte)
       已分配部分 : 2 KB(2560 Byte)
全部小空闲内存块 : 256 KB(262460 Byte)
全部大空闲内存块 : 310 KB(318432 Byte)
   其它未用内存块 : 709 KB(726864 Byte)
   内存管理器消耗 : 0 KB(404 Byte)
     地址空间载入 : 0%
当前出现 2 处内存漏洞 :
   0) 0000000000E63F40 - 15089440($E63F20)字节 - 不是对象
   1) 0000000000E9DAC0 - 15325600($E9D9A0)字节 - (未命名): TStringList (56 字节) - In Classes.pas

2008-1-9 16:16 mymousecat
两处问题找到了

费了我10分钟,两处问题终于找到,第一个是在TLiteDB的析构中,TStringList的FFields没有释放,第二个是在SystemErrorMsg函数中,用GetMem申请的内存,没有释放,我那个汗呀,这么简单的错误,为什么要犯呢,以后我真应该考虑考虑是否该自已写组件了!!!!

2008-1-9 17:18 Passion
感谢您的报告。惭愧,CnPack组件包一直处于开发期间,其中有错误在所难免。CnSQLite也是移植而来,提交者并未对其进行过比较完全的测试,因此给您带来了不便,在此说声抱歉。:)

2008-1-9 17:24 mymousecat
没关系,我想知道的是,我提交的这些错误,在下一个版本中,可以改正吗?

2008-1-9 22:56 Passion
可以。这几天就可以改正。不过改正好的代码放在CVS里,估计暂时不会提供zip包供下载。您可以通过访问CVS来获得最新代码。
下一版本的CnWizards发布时,CnPack组件包才会重新打包供下载。

2008-1-10 09:55 shenloqi
很多CnPack中的组件没有经过内存泄漏的测试(不少是大家贡献的组件移植而来),所以的确可能会有内存泄漏的问题存在,如果发现了泄漏,烦请继续报告,我们会及时更新的。

2008-1-10 10:26 mymousecat
好的,我会的

2008-1-12 21:20 Passion
CVS上最新的代码中此问题已经修复。

页: [1]
查看完整版本: CNSqlite中有内存泄露


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.