posts - 13,  comments - 11,  trackbacks - 0
    自己接触的项目基本都是用vc2003写的.这几天因为贪图vc6.0写的dll小(不必静态连接嘛).所以用上了这个"老家伙".而以前的程序都不是UNICODE字符集的,考虑到国际化,所以这个DLL就用UNICODE字符集了.

    dll的接口定义好后,又写了几个类.然后用MFC对话框程序来测试这个dll.可要命的是,vc6老是提示有内在泄露.如下:
Detected memory leaks!
Dumping objects ->
{51} normal block at 0x003B2E80, 33 bytes long.
 Data: < C              > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD
{50} normal block at 0x003B2E18, 40 bytes long.
 Data: < |L             > 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.

    我检查了所有该释放内存的地方都释放了.还是提示内在泄露...我动用了内存泄露检查工具(AQTime5),却没找到有内存泄露的地方...是怎么回事呢?

    最后,我只是在测试工程里加上dll导出来的api,而没有调用.还是提示有内在泄露...怎么回事?我确认,如果dll导出的api没有被调用,dll里就绝对不会有对象被实例化!

    可是,这样怎么还是说有内在泄露?我要抓狂了:(....

    没法,还是要找到问题出在哪里啊.我就把dll的类一个一个注释掉,把dll中的文件从工程中一个一个移除掉...把一个类里的一个变量或一个成员函数注释掉...终于发现是在一个线程类里有这样一个成员变量:wstring m_strThreadName,只要注视掉它,就不会有内在泄露的提示,只要加上就有.

    真晕,这个线程类都还没有被实例化呢.为了验证是vc6生成长歪了,我用它写了一个很简单的dll,只导出一个add的api,这个api做了一个1+1的运算,然后返回. 测试后,没问题.我又增加了一个类,并加上了一个成员变量: wstring m_name,不实例化它. 再次测试果然提示有内存泄露,和前一个dll的提示一模一样!! 我晕菜后醒来,真想拿头撞墙,最后考虑再三,只是一口气做了N个俯卧撑(N<=5,发现右手经常握鼠标,经年累月后,在手腕和手掌关节处的骨头长长了,成不了90度了.做俯卧撑时疼痛难忍,看样子,要经常锻炼身体才对)

    用vc2003或以上的版本测试,没有这个内存泄露的提示.
    哎,应该彻底的把vc6仍到厕所里了(对模板支持太差,可也怪不了人家,它出生太早).说不定又会莫名其妙的闹鬼....
posted on 2008-05-10 00:24 冰风谷 阅读(1026) 评论(2)  编辑 收藏 引用 所属分类: 冰风手记编程中的贝壳

FeedBack:
# re: vc6.0的内在泄露提示搞死我了
2008-05-10 00:56 | 冰风谷
我的妈啊,只要dll的类里的成员变量是string或wstring就有内在泄露的提示  回复  更多评论
  
# re: vc6.0的内在泄露提示搞死我了
2008-08-21 23:35 | 诶- -!
我发现wstring 和 string 确实存在内存泄漏  回复  更多评论
  

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


<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜