log4cxx 在VS2008下报内存泄露

log4cxx 在VS2008下报内存泄露

      前几下下载了log4cxx准备学习其使用,编译好log4cxx的DLL ,新建MFC工程使用,日志正常生成,OK,退出程序时VC显示有很多的内存泄露。
      顿时觉得心一凉,这开源软件质量不至于这么差吧。。。随后查了查,查到有人说是误报。
于是:   1)加上visual leak detector (vld), vld并未提示有内存泄露,看来很有可能是误报了。
           2)按下面第一篇文章的方法,跟了一下_CrtDumpMemoryLeaks,  _DllMainCRTStartup上下断点,调试可发现log4cxx先于mfc90加载了,然后释放时先释放的mfc90,它在检查已分配内存链表时,把log4cxx中的还没释放的内存误报了。
详见下面这篇文章。
http://blog.sina.com.cn/s/blog_68357baf0100ujxx.html
另外 两个 文章
http://blog.csdn.net/clever101/article/details/7926541
http://www.vis-sim.com/3dsceneBB/viewtopic.php?t=1027


解决办法:   证明为误报后就简单了,可以直接把log4cxx编译为release使用即可。
               若还是觉得不爽,非要用debug的log4cxx,在stdafx.h中加入#pragma comment(lib, "log4cxx.lib") 在工程属性中的link->Input->Additional Dependencies中删掉log4cxx.lib项, 则可使mfc90加载释放顺序正常,从而VC不再误报内存泄露。


PS:自己也写弄了个小程序演示此种mfc使用win32 dll的情况,发现一个有意思的事情,定义的string内字符数要不小于16才会显示误报情况,原因不明,望高手指点。
演示程序地址 http://download.csdn.net/detail/nwao7890/6477591

你可能感兴趣的:(log4cxx 在VS2008下报内存泄露)