Board logo

Subject: CnGraphics.pas 含有内存泄露 [Print This Page]

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

行 2685-2686

原代码

[Copy to clipboard]
CODE:
  if Assigned(FCanvas) then
    TCnCanvas(FCanvas).FreeContext; // 释放DC

改为

[Copy to clipboard]
CODE:
  if Assigned(FCanvas) then
    TCnCanvas(FCanvas).Free; // 释放DC

即可解决。

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
Author: zjy    Time: 2007-8-6 08:33     Subject: 多谢报告!

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

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

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




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0