即使有很多像这样的案例,我确实搜索过它们,但没有一个真正帮助过我。下面的代码在调试中完美地运行,但是在发布模式下它会崩溃,或者如果没有则返回损坏的字符串。释放模式的所有优化均已关闭,无效。使用Visual Studio的代码分析一无所获。如果它是某种内存/缓冲区的东西,那么它现在已经超出了我的想象。
case LBN_SELCHANGE:
//===========================================================================
//Trying to fill the edit boxes with data fetched from DB
//===========================================================================
{
string s;
wstring str;
int y;
int ind = SendMessage(GetDlgItem(hwnd, IDC_lbList), LB_GETCURSEL, 0, 0);
int index = SendMessage(GetDlgItem(hwnd, IDC_lbList), LB_GETITEMDATA, (WPARAM)ind, 0);
string sint = boost::lexical_cast<std::string>(index);
string smt = "SELECT `ID`, `client`, `telnr`, `atnrem`, `papatn`, `gedapr` FROM `tremreg` WHERE `ID` = ";
string query = smt + sint;
res = stmt->executeQuery(query.c_str());
while (res->next())
{
for (int i = 1; i <= g_iFieldCount + 1; i++)
{
if (i == 1)
{
y = res->getInt(i);
SetDlgItemInt(hwnd, IDC_eRemID, y, FALSE);
}
else
{
s = res->getString(i);
str = s2ws(s);
SetDlgItemText(hwnd, 1000 + (i - 1), str.c_str());
}
}
}
delete res;
}
break;
在发布模式下获取字符串时似乎出现了严重错误。他们充满了......有些东西。由于字符串中的前4个点填充了奇数字符和空终止符。这是一个截图。
当我将其转换为wstring str
时,剩下的就是char[0]
。
答案 0 :(得分:0)
很有可能,问题不在于您的引用代码,而在于Debug和Release之间的配置差异。
如果没有任何明显的信息,那么关于你的字符串如何被破坏或者崩溃的更多细节可能对你有所帮助:)