CnPack Forum » CnVCL 组件包 » CnGraphics.pas 含有内存泄露


2007-8-2 22:41 freespace8
CnGraphics.pas 含有内存泄露

行 2685-2686

原代码
[code]  if Assigned(FCanvas) then
    TCnCanvas(FCanvas).FreeContext; // 释放DC[/code]

改为[code]  if Assigned(FCanvas) then
    TCnCanvas(FCanvas).Free; // 释放DC[/code]


即可解决。

fastmm报的代码

21 - 28 bytes: TBrush x 3, TPen x 3
29 - 36 bytes: TFont x 3, Unknown x 2
53 - 68 bytes: Unknown x 1
85 - 100 bytes: TCnCanvas x 3

2007-8-6 08:33 zjy
多谢报告!

经检查,TCnBitmap确实存在内存泄漏,FCanvas在TCnBitmap中创建了而没有释放。

这个单元是2002年在Win98下写的,当时设计时考虑到Win98下GDI资源有限的情况,所以增加了很多GDI句柄动态处理的代码,现在来看在XP下是没什么意义了。

TCnCanvas.FreeContext用于释放图形句柄资源,FCanvas对象本身在TCnBitmap的析构器中释放更为合理。近期我会将修改过的代码提交到CVS上。

页: [1]


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