我想用mysql聯接的std :: string,而在MySQL連接器迭代查詢結果轟然
這裏從我的數據庫中的std :: string是簡單的代碼:
sql::Statement *stmt = con->createStatement();
sql::ResultSet *res = stmt->executeQuery("SELECT * FROM test.new_table");
while (res->next()) {
std::string somestring = res->getString("idnew_table");
} //crashes here
delete res;
delete stmt;
所以,executeQuery是好的,我進入循環,如果我休息,預期的結果是在somestring。在somestring聲明之後,我繼續前進到循環結尾,並在下一次迭代之前崩潰!
這裏是調用堆棧:
> msvcp100d.dll!std::_Lockit::_Lockit(int kind) Line 64 + 0x14 bytes C++
msvcp100d.dll!std::_Container_base12::_Orphan_all() Line 200 C++
CM.dll!std::_String_val<char,std::allocator<char> >::~_String_val<char,std::allocator<char> >() Line 478 + 0xb bytes C++
CM.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >() Line 755 + 0xf bytes C++
CM.dll!DAL::GetInfo() Line 45 + 0xc bytes C++
輸出:
First-chance exception at 0x1038ad4a (msvcp100d.dll) in CMLauncher.exe: 0xC0000005: Access violation reading location 0xccccccd0.
Unhandled exception at 0x76f615de in CMLauncher.exe: 0xC0000005: Access violation reading location 0xccccccd0.
First-chance exception at 0x76f5016e in CMLauncher.exe: 0x00000000: The operation completed successfully.
Unhandled exception at 0x76f615de in CMLauncher.exe: 0x00000000: The operation completed successfully.
所以看起來我有一些未初始化的內存某處C++運行時的lib ... 它看起來像它的崩潰在std :: string析構函數中,哪種類型是有道理的,因爲它在字符串範圍完成時崩潰...
我最好的猜測是libmysql是你唱一個老版本的C++運行庫(比如說msvcp90d.dll),並且它與新的版本衝突......這是否有意義?
我在windows 7下,使用mySQL Server 5.5,VS2010 Pro。全部在32位。謝謝!我很樂意發佈任何所需的mroe信息。
編輯:在別人讀取DumbCoders之前評論: MySQL Connector example 該文檔指定語句和結果集都必須刪除。
爲什麼你使用刪除未分配新的對象?如果您沒有使用new分配內存,則不應該使用delete。 – DumbCoder
,因爲mysql-connexion文檔指定我必須。無論如何,它在刪除之前崩潰。這個評論太快了,你有時間閱讀整件事情。 –
你調試過嗎?太快了,那並不是因爲你在做一些錯誤的事情。 – DumbCoder