Qt分段错误

时间:2013-12-14 17:32:58

标签: c++ qt segmentation-fault

我必须使用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()”行。

你看到了什么问题吗?

2 个答案:

答案 0 :(得分:0)

首先,你在这里有一个额外的逗号:

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

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

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

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

答案 1 :(得分:0)

我找到了答案......我猜。 当我减小列表的大小时,此SIGSEGV错误已消失。 在列表包含1000个用户之前,但现在每次调用该用户时只会有800个用户。

感谢您的帮助。