@.!AA内存泄露B
A(2009-06-22 08:07:20)
转 载 ▼
标签:S
分类:S技术交流
最近帮忙看一个朋友的程序现象是打开关闭模式对话框总是出现 内存泄露的状况
经过调试发现问题好象出在 函数 上面
重现方法注释 类中所有函数里的其它代码 简化成如
下现象还是一直会出现
!"#
#$%&%
'
()*+
!(+,,把这句注释掉现象没有再重现
---,,,,中间全部注释
---,,!!+
-----#*+
.
解决办法一如果增加再手工调用 !!+现象基本就不会出现了S按
/&的说法这个函数应该会被 CWinApp 空闲处理 %自动调用以清除
创建的可能存在的临时对象不知道怎么会出现这种状况
-
解决方法二
-----在每个出现 的函数里,最后手动添加 012)0!!3
4%5这个函数,问题解决。看来 !! 在空闲的时候确实没有去调用
012)0!!34%5这个函数,属于 1 的 67。
----看来的 1 的 67 存在不少,以后要少用 1 函数,尽量用 89:;79 函数。
每个进程 GDI 句柄上限默认是 10000(好像是这个值,可以在注册表查到),超过这个数会
导致界面出现异常,进一步泄漏的话就会导致 Crash。
自己的模块测试内存和 GDI 泄漏是很有必要的.GDI 泄漏就可以通过上面某兄弟说的任务管
理器查看到.
对于一个 c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技
术被研究出来以应对 这 个 问题,比 如 Smart Pointer , Garbage Collection 等。 Smart
Pointer 技术比较成熟,STL 中已经包含支持 Smart Pointer 的 class,但是它的使用似乎并
不广泛,而且它也不能解决所有的问题;Garbage Collection 技术在 Java 中已经比较成熟,
但是在 c/c++领域的发展并不顺畅,虽然很早就有人思考在 C++中也加入 GC 的支持。现