本地在使用LingosHook时,意外发现内存占用越来越高,很是奇怪,因为自以为多年编程养成的习惯对内存的使用还是很敏感的,不应该犯“内存泄露”,这样“常见且低级”的错误的。
一开始怀疑是抓取IE窗口内容部分代码有问题,因为自己对COM不很熟悉,其中涉及很多少用的类型和方法,加上DLL和APP间交换数据也是用了new操作的。然而去除这部分功能,内存依然在泄露,越发觉得没有道理了,因为其它代码除了wxWidgets都是自己敲的了,wxWidgets是不会出问题的(做任何判断的时候,需要先定义一个称为不变量或者基础点样的标杆,不然没有对比或者基础,是难以确认问题所在的),然而事实经过隔离分析,发现问题就是出现在自己的代码中--TinyHtmlParser对象。这就奇怪了,代码不长,看来看去,没发现有这样的错误啊,new了,也free了,怎么还有泄露呢?最后开始怀疑自己了,于是在new的地方和free的地方分别加上计数器,可是计数器值相等,就是说new了多少对象,也free了多少对象。。。疯了。。。
当然最终还是发现问题所在了,唉,将C++和C同时放在脑袋里(写TinyHtmlParser时是上班写C,下班写C++)实在是太害人了--new出来的对象怎么能用free释放呢?!该用delete啊。。。唉,C++/C混用害死人啊。。。
<-------LingosHook说明分隔线-------->
由于LingosHook安装包的制作工程只能下班编译,因此这个内存泄露问题要等晚上重新打包更改了,计划也修改一下分析结果的过程的代码,以其更方便的支持多词典分析,同时也减少了HTML字串的次数。以前理论上是有N个词典结果,需要N+1此分析,改了之后只需要一次了,和词典数量无关了。