调试与发布库版本在调试/发布客户端应用程序中有不同的行为

Debug vs release library version has different behavior with debug/release client application

本文关键字:调试 客户端 布库 版本 应用程序      更新时间:2023-10-16

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

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

  • 如果应用程序构建为调试链接库的调试版本-一切正常,假设。
  • 如果应用程序构建为发布链接库的发布版本-一切正常,假设。
  • 如果作为调试链接库的发布版本构建的应用程序-库逻辑内部出现错误,它抛出异常length_error,文本"vector too long "

为什么会发生这种情况,如果它完美地工作没有任何改变,只是如果应用程序有不同的发布/调试设置?

我没有改变任何默认的IDE设置,选择"release"/"debug"

类和STL容器的调试和发布版本可以有不同的内存布局,包括不同的变量。假设一个布局在被要求处理另一个布局时会失败而编译的代码。