gpt4 book ai didi

c++ - 连接MySQL时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:23 26 4
gpt4 key购买 nike

我在一个大项目中有这样的代码,它连接到 MySQL 数据库,但不起作用:

boost::shared_ptr<sql::Connection> connection;

sql::Driver *driver = get_driver_instance();
assert(driver != 0);

std::string server = "servname", user = "pietro", password = "abc";

try
{
connection.reset(driver->connect(server, user, password));
assert(connection != 0);

if(connection->isClosed() == false) // <-- segmentation fault
{
}

}

我在指示的地方出现段错误(所有参数均有效)。
但是,相同的代码可以在测试项目中运行。

使用调试器进入 sql::Connection::isClosed() 成员函数,我没有获得有关可能原因的信息;这是我得到的:

mysql-connector-c++-1.0.5/driver/mysql_connection.cpp - line 430

/* {{{ MySQL_Connection::checkClosed() -I- */
void
MySQL_Connection::checkClosed()
{
CPP_ENTER_WL(intern->logger, "MySQL_Connection::checkClosed");
if (!intern->is_valid) {
throw sql::SQLException("Connection has been closed");
}
}

这个checkClosed()函数从之前的connection.reset()成功执行了七次。在此阶段,“intern”指针的值不会改变且不为空。

当我检查连接是否关闭时,checkClosed() 函数将再次运行。现在“intern”指针值为 0x8,这是我无法访问的位置。

这里我得到一个SIGSEGV,段错误。

如果您想要反汇编代码,请告诉我...

平台:
MySQL 5.x
MySQL 连接器/C++ 1.0.5
Linux - OpenSuse 11.4

<小时/>

附注:我注意到所有 shared_ptr 的成员函数都按预期工作:

connection.get();          // = 0x8fb4a0
connection.use_count(); // = 1
connection.unique(); // = 1

虽然对指向的对象执行的所有调用都会导致段错误 (SIGABRT):

connection->getClientInfo();
connection->isClosed();

最佳答案

您的连接已被删除,或者您的内存已损坏。使用 valgrind 寻找答案

关于c++ - 连接MySQL时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14965082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com