我一直在尝试使用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..
我真的不确定我做错了什么。我以为它可能是Connection指针本身,所以我尝试将它转换为你现在看到的auto_ptr。同样的错误。我已经为连接功能尝试了不同的参数,但这似乎也不是问题。任何人都能解释为什么我这么早就出现了内存泄漏问题吗?
答案 0 :(得分:3)
我有同样的问题,当我使用调试模式,链接与释放连接器DLL。在调试模式下使用debug dll,可能没问题。
答案 1 :(得分:1)
使用auto_ptr时必须小心。因为auto_ptr具有异常的复制语义(复制操作将所有权转移到指向的对象,而不是复制指针),所以在完成之前很容易意外删除对象。确保您的auto_ptr&lt;&gt;对象永远不会出现在赋值的右侧,并且您不会将它们作为参数传递给按值获取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.