1

编辑:我已经停止使用 std::strings 作为这些函数的参数并且问题已经消失了。这似乎是与字符串生存期和范围有关的严重错误。我希望我能更好地理解发生了什么,但想为其他可能与类似异常作斗争的人留下另一个面包屑。/编辑

因此,我正在尝试使用 MySQL C++ 连接器(从源代码构建)编写数据库访问例程,并且在以下代码位置出现异常终止:

//Change the active table and populate the member TableInfo object
void DatabaseInterface::ChangeTable(string tableName)
{
    string sqlString;
    int numFields;
    int numRecords;
    //Crash in this call
    connection->setSchema(tableName);
//More after this, but we never get here anyway...

程序终止后,控制台中的消息为:

   warning: .dynamic section for "/lib/libnsl.so.1" is not at the expected address
    warning: difference appears to be caused by prelink, adjusting expectations
    [Thread debugging using libthread_db enabled]
    [New Thread 0xb7fecb90 (LWP 23590)]
    [Thread 0xb7fecb90 (LWP 23590) exited]
    Traceback (most recent call last):
      File "/usr/share/gdb/python/libstdcxx/v6/printers.py", line 469, in to_string
        return self.val['_M_dataplus']['_M_p'].string (encoding, length = len)
    RuntimeError: Error reading string from inferior: Input/output error

最后一个 RuntimeError 似乎表明它在函数中争论了一个空参数,并进入以下代码,我看到地址没有被分配。调试器看到一个值,但内存位置似乎不存在。事实上,试图在内存窗口中查看变量的位置会导致错误。

bool ControlInterface::GenerateCmdSet()
{
    int nRecords;
    int nFields;
    string sqlString;

    string cardCmdTable;

    cardCmdTable = "card_command";

    dbInterface.ChangeTable(cardCmdTable);

我是否有可能遇到库冲突或缺少库的问题?我对 linux 比较陌生,在与发行版、口味、依赖项等打斗时发现很难欣赏。

4

0 回答 0