MFC 内存泄漏检测误报
1. 环境
VS2005
2. 复现条件
参考 一种MFC内存泄露误报的情况 ,如文章中所述,导致内存误报的根本原因是,mfcXd.dll的加载顺序。当使用全局变量中存在new操作符申请的内存空间(如文章中的全局变量或局部静态变量std::string)的dll加载顺序先于mfcXd.dll时,则其卸载顺序将晚于mfcXd.dll。查看dll加载顺序可以使用vs提供的dumpbin工具,命令如下:
> dumpbin /IMPORTS XXXXX.exe | find /i ".dll"
3. 解决方案
可以通过dll加载顺序方向入手,具体项目可能不太一样,我的处理方式如下
- 使用
#pragma comment(lib, "xxxxx.lib")
方式加载存在该问题的dll - 将
mfcXd.dll
显示的写入到工程配置中,即 Project->Properties->Configuration Properties->Linker->Input->Additional Dependencies 中