【发布时间】:2013-11-25 12:16:52
【问题描述】:
我有一个使用 Visual Studio 2012 构建的应用程序,因此它依赖于 MSVCP110.DLL 和 MSVCR110.DLL。我正在使用另一个 DLL 文件,它似乎是使用 Visual Studio 2010 构建的,并且依赖于 MSVCP100.DLL 和 MSVCR100.DLL。我使用 Visual Studio 2008 构建的另一个 DLL 依赖于 MSVCR90.DLL。
这是一件坏事吗?真的很糟糕吗?我应该担心吗?我问的原因是运行时堆分配器抱怨堆损坏。这可能与混合运行时版本有关吗?
【问题讨论】:
-
是的。尝试在您的应用程序中一次使用多个 Visual Studio 运行时是一件非常糟糕的事情。主要原因是每个 CRT 都有自己独立的堆(堆之间没有通信)。这意味着您不能在 1 个堆中分配内存并在一秒钟内释放它。这将导致堆损坏并导致随机崩溃,因为损坏可能不会导致下一次分配或释放时崩溃。
-
BTW Visual Studio 2010 运行时文件名中将包含 100。
-
@drescherjm - 修复了文件名。复制粘贴错误。
标签: c++ c winapi visual-c++ dll