2012-06-15 46 views
3

我想用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 該文檔指定語句和結果集都必須刪除。

+3

爲什麼你使用刪除未分配新的對象?如果您沒有使用new分配內存,則不應該使用delete。 – DumbCoder

+3

,因爲mysql-connexion文檔指定我必須。無論如何,它在刪除之前崩潰。這個評論太快了,你有時間閱讀整件事情。 –

+0

你調試過嗎?太快了,那並不是因爲你在做一些錯誤的事情。 – DumbCoder

回答

5

此問題與您的問題類似here

+0

我會看看這個,謝謝! –

+0

我碰到過,連接到一個稍微不同版本的'std :: vector'的庫(設置了'_SECURE_SCL',我的不是)。非常令人沮喪。 VS2010給你一個明確的錯誤在這個iirc –

+0

所以,這實際上是同一個問題。但我仍然對實際的解決方案感到困惑。我無法重新編譯mysql連接器庫,那麼我該如何恰當地使用它? Ed S.你有過嗎? –