代码在调试中工作,但不在发布中

时间:2014-06-05 10:33:19

标签: winapi visual-c++ mysql-connector

即使有很多像这样的案例,我确实搜索过它们,但没有一个真正帮助过我。下面的代码在调试中完美地运行,但是在发布模式下它会崩溃,或者如果没有则返回损坏的字符串。释放模式的所有优化均已关闭,无效。使用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个点填充了奇数字符和空终止符。这是一个截图。

http://imgur.com/7TfErwE

当我将其转换为wstring str时,剩下的就是char[0]

1 个答案:

答案 0 :(得分:0)

很有可能,问题不在于您的引用代码,而在于Debug和Release之间的配置差异。

如果没有任何明显的信息,那么关于你的字符串如何被破坏或者崩溃的更多细节可能对你有所帮助:)