2013-12-14 2 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()"라인입니다.

잘못된 것이 있습니까? "(,,,,?????)"그래서

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

하거나 문자열을 추가 한 후 시간-1을 계산하고 "반복": 모든

+0

디버깅으로 컴파일 한 후 일부 디버거 (예 :'gdb')를 사용하고 모든 경고 (예 :'g ++ -Wall -g') –

+0

에서 답을 살펴보십시오. –

답변

0

답변을 찾았습니다. 목록의 크기를 줄이면이 ​​SIGSEGV 오류가 사라졌습니다. 목록에 1000 명의 사용자가 포함되기 전에이 메소 드로 통화 당 800 명의 사용자 만 사용할 수 있습니다.

도움 주셔서 감사합니다.

0

먼저 여기에 추가 쉼표가

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

또는 문자열 bindValue의 마지막 문자를 제거해야합니다.

+0

QString의 replace 메서드를 사용하여 마지막 혼수 상태를 바꿉니다. – CERVERA