我在我的项目中有以下代码。变量损坏C++字符串Visual Studio 2005
g(const string& str)
{
printf("%s", str.c_str());
}
f()
{
string str("whatever");
g(str);
}
它是非常大的代码的一部分。 g()在dll中并且api被导出。 f()是可执行文件的一部分。此代码用于正常工作。但是现在它只适用于调试配置而不是发布配置。我试图调试,发现只要我敲击g()str内容的第一条语句就会消失。所以它打印出null。
发行配置没有改变。
请帮忙。
最好的问候, 希夫
投票结束:您应该尝试减少原始代码,直到您意识到失败。这个问题不能回答,因为发布的代码没有表现出行为。答案是你的代码中某处存在某些问题,但这并不具有建设性。注意(这可能是问题),如果你用不同的标志进行编译,主程序和dll的STL定义可能会有所不同,这将导致违反ODR和未定义的行为。 –
这听起来像一个构建问题(可能与链接器有关)。我的建议是:(1)彻底重建; (2)确保DLL和主程序都是在发布模式下构建的; (3)确保在运行主程序时总是选取正确的DLL; (4)即使你说发布配置没有改变,仔细检查这是事实。 – NPE