我的 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
感谢您的任何评论。