【问题标题】:Code works in debug but not in release代码在调试中有效,但在发布中无效
【发布时间】:2014-06-05 10:33:18
【问题描述】:

尽管有很多这样的案例,并且我确实搜索过它们,但它们都没有真正帮助我。下面的代码在调试中完美运行,但在发布模式下它会崩溃,或者如果没有,则返回错乱的字符串。发布模式的所有优化都被关闭,没有结果。使用 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]

【问题讨论】:

  • 您应该从您的问题中省略代码中完美运行的部分。如果问题出在记录集上,则从 string smt = "SELECT ... 行开始

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


【解决方案1】:

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

如果没有明显的关于您的字符串究竟是如何被弄乱或崩溃的详细信息可能会对您有所帮助:)

【讨论】:

  • 我确实禁用了所有优化,以确保它与调试环境相同。在调试中,来自 DB 的test 在获取时为test。在发布时,test 类似于"\x1"。作为旁注,这可能是通知。观察该字符串的值的下拉菜单为我提供了一些有趣的信息。 size = 273capacity = 287。 DB 字段是 Varchars。损坏的字符串主要由空终止符和各种其他内容组成,例如\x4\xf。字符串内容的 char[4] 到 char[7] 包含我的字母...116 't' 等。
  • 如果您在发布中禁用了优化,那么只需调试发布版本并找到问题。
  • @tenfour 我就是这么做的。用我的新发现更新了主帖,这让我更加困惑。
猜你喜欢
  • 2012-01-19
  • 2023-03-18
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多