簡體   English   中英

MySQL C ++連接器內存溢出錯誤

[英]MySQL C++ Connector memory overflow error

我一直在嘗試使用MySQL / C ++ Connector軟件包連接到我自己的本地托管MySQL數據庫。 真正給我一個問題的行是:

driver = get_driver_instance();
auto_ptr < Connection > con (driver -> connect("tcp://127.0.0.1:3306", "root", "root"));

點擊兩行中的第二行會給我一個內存分配錯誤。 這是調試器的讀數。

HEAP[mySQLTestApp.exe]: Invalid allocation size - CCCCCCD0 (exceeded 7ffdefff)
First-chance exception at 0x7c812afb in mySQLTestApp.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0012fa88..
HEAP[mySQLTestApp.exe]: Invalid allocation size - CCCCCCCD (exceeded 7ffdefff)
First-chance exception at 0x7c812afb in mySQLTestApp.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0012f428..
First-chance exception at 0x7c812afb in mySQLTestApp.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..
Unhandled exception at 0x7c812afb in mySQLTestApp.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0012f428..

我真的不確定自己做錯了什么。 我以為可能是連接指針本身,所以我嘗試將其轉換為您現在看到的auto_ptr。 同樣的錯誤。 我為connect函數嘗試了不同的參數,但這似乎也不是問題。 誰能解釋為什么我這么早就在程序中遇到內存泄漏問題?

當我使用調試模式時,與發布連接器dll鏈接時,我遇到了同樣的問題。 在調試模式下使用debug dll,可能沒問題。

使用auto_ptr時必須小心。 因為auto_ptr具有不尋常的復制語義(復制操作將所有權轉移到指向的對象,而不是復制指針),所以在完成對象之前意外刪除它是很容易的。 確保您的auto_ptr <>對象永遠不會出現在分配的右側,並且不要將它們作為參數傳遞給按值接受auto_ptr的函數。 您的代碼顯示不足,無法對其進行全面診斷。

例如

// declaration for some function you've defined later
void some_user_function(auto_ptr<Connection> con);

auto_ptr<Connection> con(driver->connect("tcp://127.0.0.1:3306", "root", "root"));
some_user_function(con);
// At this point con will be a NULL pointer, and the Connection object it used to point
// to will have been deleted.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM