2014-06-05 58 views
0

即使有很多這樣的情況,並且我搜索了它們,但它們都沒有以任何方式幫助我。下面的代碼在調試中完美工作,但是在發佈模式下它會崩潰,或者如果沒有則返回損壞的字符串。所有針對發佈模式的優化都將關閉,而不會導致結果。使用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]

+0

你應該從你的問題你的代碼工作完美的部分省略。如果問題出在記錄集上,那麼就從'string smt ='SELECT ...行開始吧' – KonstantinL

回答

0

有一個很好的機會,問題不在於您的引用代碼,而是在調試和發佈之間的配置差異。

如果沒有什麼明顯的在你的琴絃究竟如何錯位向上或崩潰什麼一些進一步的細節可能會有所幫助,以協助您:)

+0

我從字面上禁用了所有優化,以確保它與調試環境相同。在調試中,當來自數據庫的'test'是'test'時在釋放時,'test'就像是''\ x1「'。作爲一個附註,可能會注意到,從下拉菜單中看到該字符串的值已經讓我看到了一些有趣的信息:'size = 273', 'capacity = 287'。DB字段是Varchars。這個被破壞的字符串主要由空終止符組成,還有其他一些東西,比如'\ x4'和'\ xf',字符串內容的char [4]到char [7]我的信...'116't''等 – Sanctae

+0

如果你在版本中禁用了優化,那麼只需調試發佈版本並找到問題 – tenfour

+0

@tenfour我正在這樣做,用我的新發現更新了主帖,這隻會讓我更加困惑。 – Sanctae

相關問題