vs2010 debug vs release:为什么stl列表解释错误

时间:2014-12-19 23:05:16

标签: c++ visual-studio-2010 stl

我有一个程序将stl列表传递给dll,当两个模块都处于调试模式时,一切正常。将dll更改为释放模式时,传递不再起作用。我检查了主应用程序中的列表(调试版本)并检查了列表大小为16个字节,立即在我检查的列表中,列表大小现在变为12个字节。并且列表中的所有内容都被错误地解释了。我检查了编译器选项并对结构对齐有疑问,但没有得到任何线索。有谁可以给​​我一些提示?非常感谢。

传递结构:

class data
{
int
int
char*
double
}

class datalist
{
int 
int 
int 
list<data> list1
list<data> list2
};

传递机制:

fun(const datalist& dl)

*更多说明:

main app (debug) + dll (debug): work fine
main app (release) + dll (release): does not work
main app (debug) +dll (release): does not work

两个模块都使用相同的编译器vs2010 *

进行编译

2 个答案:

答案 0 :(得分:3)

您的DLL使用的是与您的应用程序不同的C ++标准库版本,因此每个版本都有std::list自己的(不兼容的)版本。您必须使用(Visual Studio 2010,Release)构建应用程序的相同编译器和配置重建DLL。

答案 1 :(得分:0)

main app (debug) + dll (debug): work fine
main app (release) + dll (release): does not work
main app (debug) +dll (release): does not work

原生DLL是一种非常原始的低级机制。如果应用程序和DLL的编译器具有不同的设置,则任何一方都不知道另一方做出不同的选择。因此,开发人员必须确保所有内容都兼容。

在调试与发布的情况下,差异往往过于显着。所以,不要混合这样的东西。

如果您的发布版本不能协同工作,您应该检查每个项目上的所有编译器/链接器设置,并确保它们是兼容的(这通常意味着它们完全相同)。