2

我的 Windows 程序包括

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

  • 一个 C++(非 MFC)my.dll。此 dll 调用第 3 方库(Oracle 的 OCCI C++ 库)。

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

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

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

但是,如果我在 3rd 方库中调用某些函数,则退出时不会报告泄漏。也就是说,我可以从我的 dll 中调用一些 occi 函数,但是一旦我调用 occi 函数来实际连接到数据库(这似乎运行良好),那么我的所有泄漏报告都会消失,就好像没有泄漏一样。

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

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

感谢您的任何评论。

4

0 回答 0