2011-01-08 51 views
0

我试图通过C++使用MySQL/C++连接器显示一个小的MySQL表,但是当我执行以下函数时,我的程序要么退出消息“Aborted”获得段错误。任何人都可以告诉我我在这里做错了什么?我认为我很好地跟踪了文档。 :/SEGFAULT使用MySQL/C++连接器获得结果

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

你的调试器说什么?它会告诉你什么行号? – bmargulies 2011-01-08 02:52:40

+0

这不是一个调试器。这是glibc;具体来说,它检测到你的程序正在传递一个无效指针给`free'。即使你不直接调用`free`,你正在使用的库是。 GNU调试器是`gdb`。有多种包装`gdb`的程序,包括Emacs,Eclipse和NetBeans。 – 2011-01-08 06:39:29

回答

0

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

感谢来自## C++ - 基本(Vincent Damewood的http://damewood.us/)的vinleod以帮助找出答案。

3

它看起来像你调用顺序错误deleteexample首先删除res

该析构函数可能引用相关的Statement

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