Codejie's C++ Space

Using C++

随笔:C++/C“混用”的害死人


     本地在使用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此分析,改了之后只需要一次了,和词典数量无关了。

posted on 2010-03-05 17:50 codejie 阅读(569) 评论(4)  编辑 收藏 引用 所属分类: C++随笔而已

评论

# re: 随笔:C++/C“混用”的害死人 2010-03-06 21:29 陈梓瀚(vczh)

使用智能指针……  回复  更多评论   

# re: 随笔:C++/C“混用”的害死人[未登录] 2010-03-07 09:00 codejie

@陈梓瀚(vczh)
auto_ptr不能放在容器中,且TinyHtmlParser使用的是C风格的List,需要类似prev和next的,所以还是原生指针比较好用的。  回复  更多评论   

# re: 随笔:C++/C“混用”的害死人[未登录] 2010-03-09 06:52 Liu

哈哈哈,乐死我了。

你的东西哪里可以下载阿?  回复  更多评论   

# re: 随笔:C++/C“混用”的害死人 2010-03-09 09:42 codejie

@Liu
至于乐成这样吗。。。是不是看我被搞死,你很开心啊。。。
另,不要说‘哪里下载’这样的话好不?就在下一个随笔里面,你这样说弄得跟个‘托’似的。。。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜