c ++ Windows _CrtSetDbgFlag在调用第三方库

时间:2017-04-24 16:20:19

标签: c++ memory-leaks mfc msvcrt occi

我的Windows程序包含

  • C ++(MFC)控制台应用程序 my.exe ,它会发出_CrtSetDbgFlag以查看退出时的内存泄漏。

  • C ++(非MFC) my.dll 。这个dll称为第三方库(Oracle' s OCCI C ++库)。

my.exe在main()函数中故意泄漏: new char [333];

当程序退出时,我会看到这些泄漏: ​​-

检测到内存泄漏! 转储对象 - > ... myExe.cpp(62):{384}正常阻塞位于0x0087C4B0,333字节长。

但是,如果我调用第三方库中的某些功能,则退出时不会报告任何泄漏。也就是说,我可以从我的dll调用一些occi函数,但是一旦我调用occi函数实际连接到数据库(看起来效果很好),那么我的所有泄漏报告都会消失,好像没有泄漏。 / p>

我怀疑这种情况正在发生,因为虽然我正在使用正确版本的oracle的occi dll,但它使用的是oracle的低级别oci.dll,它似乎使用旧版本的MSVC运行时。依赖步行者显示:

MY.EXE
    MSVCR100D.DLL
    MY.DLL
        MSVCR100D.DLL
        ORAOCCI11D.DLL
            MSVCR100D.DLL
            OCI.DLL
                MSVCR80.DLL

感谢您提出任何意见。

0 个答案:

没有答案