【问题标题】:Qt segmentation faultQt 分段错误
【发布时间】:2013-12-14 17:32:57
【问题描述】:

我必须使用 C++ 和 QT 库开发一个社交网络模拟器。 我使用 QODBC 将用户存储到 mysql 数据库中。 当我运行我的应用程序时,我抛出一个 SIGSEGV 错误。

这里,我的函数抛出了这个错误:

QMutex userMutex;
userMutex.lock();

QListIterator<User*> i(users);
User* user;
QString sql = "insert into t_user (id, pseudo, name, firstname, birthdate) values ";
QString bindValue = QString::fromStdString("(?, ?, ?, ?, ?),").repeated(users.count());
sql.append(bindValue);
QSqlQuery query = QSqlQuery(Interface::getCnx());
query.prepare(sql);
while(i.hasNext())
{
    user = i.next();
    query.addBindValue(QString::number(user->getId()));
    query.addBindValue(user->getPseudo());
    query.addBindValue(user->getName());
    query.addBindValue(user->getFirstname());
    QString birthdate = QString::number(user->getBirthDate().year()) + "-" + QString::number(user->getBirthDate().month()) + "-" + QString::number(user->getBirthDate().day());
    query.addBindValue(birthdate);
}
query.exec();

userMutex.unlock();

引发此错误的是“query.exec()”行。

你知道有什么问题吗?

【问题讨论】:

  • 在调试和所有警告(例如g++ -Wall -g)编译后尝试使用一些调试器(例如gdb
  • 看看答案。

标签: c++ qt segmentation-fault


【解决方案1】:

首先这里多了一个逗号:

QString bindValue = QString::fromStdString("(?, ?, ?, ?, ?),").repeated(users.count());

所以,或者你“重复”字符串 count-1 次,然后添加“(?, ?, ?, ?, ?)”:

QString bindValue = QString::fromStdString("(?, ?, ?, ?, ?),").repeated(users.count() - 1);
bindValue "(?, ?, ?, ?, ?)";

或者您必须删除字符串 bindValue 的最后一个字符。

【讨论】:

  • 我用QString的replace方法替换了最后一个逗号。
【解决方案2】:

我找到了答案……我猜。 当我减小列表的大小时,这个 SIGSEGV 错误消失了。 之前列表包含 1000 个用户,但现在每次调用此方法时它只包含 800 个用户。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2011-01-28
    • 2023-03-11
    • 2023-03-07
    相关资源
    最近更新 更多