这两天按照之前的习惯,在开发过程中使用调试模式运行的时候,发现有意料之外的内存泄漏问题。经过不断的核查定位,最终发现是在使用FreeLibrary函数卸载自己写的一个MFC DLL之后报的内存泄漏。然后又Review了好几遍,十分确定自己的代码没有问题!然后注释了一对代码,发现就算只用了LoadLibrary和FreeLibrary也一样会报内存泄漏。然后找了一下调用MFC DLL内存泄漏相关问题的解决方案,什么取消使用共享的DLL中使用MFC,改预定义、依赖库等等,都没有解决问题。最后只能先测试其他功能。。。
后面跑着跑着,突然报mfc140ud.dll内存访问错误,突然灵光一现,想说会不会是字符集编码导致的问题!!然后核对了一下MFC DLL和Exe项目的设置。果然,一个设成多字节字符集,一个设成了unicode字符集。。。然后改了一下字符集设置,果然就不报内存泄漏了
本来字符集应该不影响程序功能的,但是VC中不同字符集所依赖的mfc运行时库是不一样的,估计是运行时库冲突导致的问题吧。因为我其他不使用MFC库的DLL也是使用的多字节字符集,但是并不会导致这个问题。