通过引用库函数传递QString时的SEGFAULT

时间:2013-05-08 00:50:15

标签: qt parameters reference shared-libraries

我一整天都在和这个打架,我尝试过许多不同的时尚传递QString,std :: string和char *但是如果我传递它以便我可以修改参数库函数里面的值然后是SEGFAULTs。如果我将库函数(换行)复制到主应用程序中,我可以整天传递引用作为参数并在函数内部更改它们的值。

这是库中我的函数的精简版本。 我已经删除了除此行之外的所有代码。

MySQLLib::ExecuteQuery(const QString& query, QString& results)
{
  results = "Changed the value of this parameter.";
}

以下是主应用程序的调用代码。 bmdbTest是上面MySQLLib类的一个实例...... 我的库和应用程序中的所有其他代码都有效。它只是不允许我将对ANYTHING的引用传递给我的库。

MySQLProj::pbExecuteQuery_Click()
{
  QString x = "Hello.";
  bmdbTest->ExecuteQuery("SELECT ttid from test_table", x);
  ui_MySQLProj1.textEdit->setText(x);
}

它在bmdbTest-> ExecuteQuery调用上进行了SEGFAULT。 我甚至试过一个简单的int&作为参数没有成功。 然而,我可以将params作为const QString&没有问题。我无法以这种方式修改param的值。

编辑:我刚想通了。感谢“paxdiablo”建议我检查我的变量是否为null或无效指针。我昨晚真的很累,我不敢相信我错过了这个。

我刚刚发现问题,我觉得自己像个完全白痴。您提到bmdbTest为null或无效。 bmdbTest的值很好,因为我的所有其他函数都运行正常,但是当我调用ExecuteQuery()时,我从我的GUI窗口传递QLineEdit中的值的查询字符串就像这样。

bmdbTest->ExecuteQuery(leQuery->text(), resultString);

leQuery-> Text()实际上是问题,因为我必须像这样访问leQuery。

bmdbTest->ExecuteQuery(ui_MySQLProj1.leQuery->text(), resultString);

1 个答案:

答案 0 :(得分:1)

您可能想要检查bmdbTest本身的值。它可能为null或指针无效。

这似乎表明它是那条行的错误。如果对参数有疑问,我希望它在 ExecuteQuery函数中错误。

您应该能够通过在results = ...bmdbTest->ExecuteQuery(...)行的任一侧放置合适的调试语句(使用刷新)来找出完全崩溃的位置(或者如果你有一个调试器,请使用它。)