编辑:我已经停止使用 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 比较陌生,在与发行版、口味、依赖项等打斗时发现很难欣赏。