Debug vs release库版本与调试/发布客户端应用程序具有不同的行为

时间:2014-07-25 09:44:07

标签: c++ visual-studio-2010 dynamic dll

我有msvc 10.0构建的库(动态隐式链接),它导出类和STL容器。它构建为发布和调试(两个版本)。它不是我的,所以我没有源代码。

我有一个简单的应用程序,它调用来自这个库的方法(也是由msvc 10.0构建的,所以,我想,STL和编译器版本的兼容性应该没有问题。)

  • 如果应用程序构建为调试链接调试版本的库 - 一切正常,假设为。
  • 如果构建为发布链接的应用程序发布了库的版本 - 一切正常,假设为。
  • 如果构建为调试链接的应用程序发布库版本 - 库逻辑中出现错误,则会引发异常 length_error ,文本“向量太长”

如果应用程序具有不同的发布/调试设置,为什么会在没有任何更改的情况下完美地工作?

我没有更改任何默认的IDE设置,选择“release”/“debug”。

1 个答案:

答案 0 :(得分:0)

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