我一整天都在和这个打架,我尝试过许多不同的时尚传递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);
答案 0 :(得分:1)
您可能想要检查bmdbTest
本身的值。它可能为null或指针无效。
这似乎表明它是那条行的错误。如果对参数有疑问,我希望它在 ExecuteQuery
函数中错误。
您应该能够通过在results = ...
和bmdbTest->ExecuteQuery(...)
行的任一侧放置合适的调试语句(使用刷新)来找出完全崩溃的位置(或者如果你有一个调试器,请使用它。)