2014-07-25 63 views
0

我有msvc 10.0构建的库(动态,带隐式链接),导出类和STL容器。它构建为发布版和调试版(两个版本)。这不是我的,所以我没有源代码。我有一个简单的应用程序,从这个库调用方法(也由msvc 10.0构建,所以,我猜,STL和编译器版本的兼容性不应该存在问题)。调试vs发布库版本与调试/发布客户端应用程序具有不同的行为

  • 如果构建为调试链接的应用程序调试库的版本 - 一切正常,假设。
  • 如果应用程序构建为发布链接发布版本的库 - 一切正常,假设。
  • 如果应用程序内置的调试链接库的发行版本 - 似乎有库逻辑中的错误,它会抛出异常length_error文本“矢量过长”

为什么能出现这种情况,如果它完美工作没有任何变化,只是如果应用程序有不同的版本/调试设置?

我没有改变任何默认的IDE设置,选择“放行” /“调试”。

+1

混合构建类型从来就不是一个好主意。 –

+0

是的,但有时我们没有调试库版本。但我们必须调试我们的应用程序,并将其构建为“调试”。我从未遇到过这样的问题。如果你可以建议哪里可以解决问题,那会很好。 – Arkady

回答

0

调试和重新类和STL容器的租赁版本可以有不同的内存布局,包括不同的变量。如果要求处理其他布局,假定一个布局编译的代码将失败。

+0

为什么他们有不同的内存布局,如果他们都使用相同的编译器和相同的STL实现? – Arkady

+0

正如我所了解的调试 - 这就像额外的布局/内存管理器,每次分配时都会生成一些关于分配内存的调试信息。并创建方法来访问分配的内存,但不会更改其包装的任何方法的逻辑。 – Arkady