2010-06-21 73 views
1

我一直无法找到很多或任何有关这方面的信息。我有一个使用VS2005构建的项目,因此使用mscvr80.dll。我的项目也加载第三方库,然后加载mscvrt60.dll。加载多个mscvrt **。dll版本是否存在问题?

现在我有一个奇怪的错误在我的程序中的程序崩溃与内存读取违规(调试它在0xcdcdcdcd,从我的搜索描述非初始化的内存位置)。调试程序指示违规在第三方库中的未知功能内。

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

任何输入,非常感谢。

回答

1

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

+0

有没有简单的方法来编译我的项目对V60?没有真正尝试将解决方案降级到Visual C++ 6.0? – DeusAduro 2010-06-22 16:39:11

+0

那么,如果您安装了VC6,则可以在链接器设置中选择“无默认库”选项。然后手动将其指向较旧的馆藏。 – 2010-06-22 17:03:06

1

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

+0

谢谢,但我已经检查了加载的库,它肯定是调试(在调试时)和两个版本(在发布时)。 – DeusAduro 2010-06-22 16:38:26