Ошибка сегментации при подключении к MySQL

У меня есть этот код в большом проекте, который устанавливает соединение с базой данных 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 — строка 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() как раз перед тем Значение «internmsgstr «указатель не изменяется и не является нулевым на данном этапе.

Когда я проверяю, закрыто ли соединение, checkClosed() функция запускается снова. Теперь «internmsgstr «значение указателя 0x8, местоположение, к которому я не могу получить доступ.

Здесь я получаю SIGSEGV, ошибка сегментации.

Дайте мне знать, если вы хотите разобранный код …

Платформа:
MySQL 5.x
MySQL, Connector / C ++ 1.0.5
Linux — OpenSuse 11.4


P.S .:
Я заметил, что все shared_ptrФункции-члены работают как положено:

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

в то время как все вызовы, сделанные на указанном объекте, вызывают ошибку сегментации (SIGABRT):

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

0

Решение

либо ваше соединение удалено, либо у вас повреждена память. используйте valgrind, чтобы найти ответ

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]