【发布时间】:2012-04-13 21:50:40
【问题描述】:
我正在尝试使用 MySQL C++ 连接器连接到数据库。我已经添加了库,并且源代码使用所有必要的#include 语句正确编译。我使用的代码如下:
#include <stdlib.h>
#include <iostream>
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
using namespace std;
int main(void)
{
using namespace sql;
Driver *driver;
Connection *con;
driver = get_driver_instance();
con = driver -> connect("tcp://127.0.0.1:3306/test", "test", "test");
}
代码直接取自示例,应该可以正常工作。我已经显着缩短了代码,因为它位于引发错误的最终“驱动程序 - > 连接”行。我的错误信息如下:
*** glibc detected *** /home/username/NetBeansProjects/mysql/dist/Release/GNU-Linux-x86/mysql:
free(): invalid pointer: 0x091dd468 ***
我在 Linux Mint Lisa 上,运行最新版本的 MySQL 并使用 NetBeans 7.1 作为 IDE。如前所述,代码编译正确,并且发生在最后一条连接线上。对于其他连接机制的任何帮助或建议将不胜感激。
更新
这是定义连接的 Driver 类中的代码
class CPPCONN_PUBLIC_FUNC Driver
{
protected:
virtual ~Driver() {}
public:
// Attempts to make a database connection to the given URL.
virtual Connection * connect(const sql::SQLString& hostName, const sql::SQLString& userName, const sql::SQLString& password) = 0;
virtual Connection * connect(ConnectOptionsMap & options) = 0;
...
那里没什么可看的……以我的拙见……
【问题讨论】:
-
看起来好像一些内存已被释放,然后尝试再次释放,但由于不再分配而失败。无法从您发布的代码中真正分辨出来,您可以发布其余的吗?还是放一个示例代码的链接?
-
这就是所有的代码!我将使用驱动程序 -> 连接功能从页面发布代码,但这直接来自 MySQL 连接器开发团队,所以我怀疑它会包含错误:/.
-
get_driver_instance是您的代码还是连接器的一部分?如果是你的,请张贴那个。 -
连接器,但如果你愿意,我可以发布它。我这里没有写任何代码。我截断了 MySQL 网站上的一个 hello world 程序,仅此而已。我在网上找到了一些关于 Boost 库冲突的信息,但这似乎不适用于我这里......
-
get_driver_instance()返回一个指针,因此该值可以为 null,这是您应该检查的内容。
标签: c++ mysql mysql-connector