Код работает при отладке, но не в выпуске

Несмотря на то, что таких случаев много, и я их искал, ни один из них мне никак не помог. Приведенный ниже код отлично работает при отладке, но в режиме выпуска он дает сбой или возвращает искаженные строки, если это не так. Все оптимизации для режима выпуска отключены, но результата нет. Анализ кода 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].


person Laurgrin    schedule 05.06.2014    source источник
comment
Вы должны опустить в вопросе ту часть кода, которая работает безупречно. Если проблема связана с набором записей, начните со строки string smt = "SELECT ...   -  person KonstantinL    schedule 05.06.2014


Ответы (1)


Есть большая вероятность, что проблема заключается не в вашем цитируемом коде, а в различиях конфигурации между Debug и Release.

Если нет ничего очевидного, некоторые дополнительные подробности о том, как именно ваши струны искажаются или что происходит сбои, могут быть полезны вам :)

person JohnTheCompilator    schedule 05.06.2014
comment
Я буквально отключил всю оптимизацию, чтобы убедиться, что это та же среда, что и отладка. При отладке test из БД при извлечении равно test. В выпуске test это что-то вроде "\x1". В качестве примечания, которое, вероятно, является заметкой. Выпадающее меню при просмотре значения этой строки дало мне интересную информацию. size = 273, capacity = 287. Поля БД - Варчары. Искаженные строки состоят в основном из нулевых терминаторов и различных других вещей, таких как \x4 и \xf. от char [4] до char [7] содержимого строки содержат мои буквы ... 116 't' и т. д. - person Laurgrin; 05.06.2014
comment
если вы отключили оптимизацию в выпуске, просто отладьте сборку выпуска и найдите проблему. - person tenfour; 05.06.2014
comment
@tenfour Я так и делаю. Обновил основной пост моими новыми открытиями, которые только озадачивают меня еще больше. - person Laurgrin; 05.06.2014