代码之家  ›  专栏  ›  技术社区  ›  DeusAduro

加载多个mscvrt**.dll版本时是否存在问题?

  •  1
  • DeusAduro  · 技术社区  · 14 年前

    我一直找不到关于这个的很多或任何信息。我有一个使用vs2005构建的项目,因此使用mscvr80.dll。我的项目还加载第三方库,然后加载mscvrt60.dll。

    现在,我的程序中有一个奇怪的bug,在这个bug中,程序因内存读取冲突而崩溃(在调试中,它位于0xcdcdcdcd,在我的搜索中,它描述了一个未初始化的内存位置)。调试器指示该冲突位于第三方库中的未知函数内。

    我已经联系了这个图书馆的所有者,他们不知道任何错误,如前所述。另外,我还有其他在VS60中编译的项目,它们使用这个第三方库,并且没有类似的错误。因此,我想知道,使用多个公共运行时版本会有问题吗?我记得我隐约听到一个运行时(比如.dll)可以分配内存的情况,然后如果另一个版本试图释放内存,这可能会导致问题。然而,我记不起我在哪里读到这篇文章,也找不到关于这个主题的很多信息。

    任何意见都非常感谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Peter Ruderman    14 年前

    释放由运行库的一个版本在另一个版本中分配的内存肯定会导致问题。不能保证CRT堆的实现细节在版本之间保持不变。如果找不到其他解决方法,可以尝试根据mscvrt60.dll编译应用程序。

        2
  •  1
  •   Kristopher Johnson    14 年前

    如果您看到的是0xcdcdcdcd,那么您可能正在混合调试运行时库和发布运行时库。它们应该可以一起工作,但您可以尝试仅使用发行版运行时复制问题。