2013-12-14 79 views
0

我必須開發一個使用C++和QT庫的社交網絡模擬器。 我使用QODBC將用戶存儲到mysql數據庫中。 當我運行我的應用程序時,我拋出一個SIGSEGV錯誤。Qt分段錯誤

在這裏,我的函數拋出這個錯誤:

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()」 線,拋出此錯誤。

你看到有什麼問題嗎?

+0

嘗試使用一些調試程序(例如'gdb')編譯調試和所有警告(例如'g ++ -Wall -g') –

+0

看看答案。 –

回答

0

我找到了答案......我猜。 當我減小列表的大小時,此SIGSEGV錯誤已消失。 在列表中包含1000個用戶之前,但現在每個調用此方法的用戶只有800個。

感謝您的幫助。

0

首先你有一個額外的逗號這裏:

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

所以,還是你 「重複」 串計數1次,然後添加 「(,,,,?????)」:

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

或者您必須刪除字符串bindValue的最後一個字符。

+0

我使用QString的替換方法替換最後一次彗差。 – CERVERA