SEGFAULT使用MySQL / C ++连接器获得结果

时间:2011-01-08 02:39:37

标签: c++ mysql segmentation-fault

我正在尝试使用MySQL / C ++ Connector通过C ++显示一个小的MySQL表,但是当我执行以下函数时,我的程序要么退出“Aborted”消息,要么我得到段错误。谁能告诉我这里我做错了什么?我以为我很好地遵循了文档。 :/

void
addressBook::display(sql::Connection* con)
{
    sql::Statement *stmt;
    sql::ResultSet *res;

    // Create the statement object
    stmt = con->createStatement();

    // Execute a query and store the result in res
    res = stmt->executeQuery("SELECT * FROM address_book "
                 "ORDER BY last_name, first_name");

    // Loop through the results and display them
    if(res)
    {
        while(res->next())
        {
            std::cout << "Name: " << res->getString("first_name")
                  << " "    << res->getString("last_name") << std::endl
                  << "Phone: " << res->getString("phone") << std::endl
                  << "eMail: " << res->getString("email") << std::endl
                  << "City: " << res->getString("city") << std::endl
                  << "Comments: " << res->getString("comments")
                  << std::endl << std::endl;
        }
    }
    delete stmt;
    delete res;
}

可在此处找到完整(尚未完成)的程序,以供参考。 http://pastebin.com/kWnknHi4

此外,被调用的表中的每个字段都包含一个有效的字符串。

修改可以在此处找到调试器消息:http://pastebin.com/NnSqV8hv

2 个答案:

答案 0 :(得分:3)

您似乎以错误的顺序呼叫deleteexample首先删除res

ResultSet析构函数可以引用关联的Statement

通常,您应该按照创建/分配对象的相反顺序执行free / delete

答案 1 :(得分:0)

问题是我的系统上的库安装不正确;根据文档,您运行make clean作为中间步骤,它应该只是make

感谢来自## c ++ - basic(http://damewood.us/的Vincent Damewood)的vinleod帮助解决这个问题。