我有一些麻烦调试这段代码,它使用QDataStream将QStandardItemModel写入文件进行序列化:
"在"和" out"是QDataStream对象。
" userInfosModel"是一个表示表的QStandardItemModel。
这是作家功能:
int rows = userInfosModel->rowCount();
int columns = userInfosModel->columnCount();
// writing rows and columns
out << (quint32)rows;
out << (quint32)columns;
for (int row = 0; row < rows; row++)
for(int col = 0; col < columns; col++) {
QStandardItem *item = userInfosModel->item(row,col);
if(item)
out << *item;
else
return false;
}
return true;
和当col = 1时发生分段故障的阅读器功能:
userInfosModel->clear();
quint32 rows, columns;
qDebug() << "reading user infos" << endl;
in >> rows;
in >> columns;
qDebug() << "rows = " << rows << "cols = " << columns << endl;
for(quint32 row = 0; row < rows; row++)
for(quint32 col = 0; col < columns ; col++) {
// no SIGSEGV if i uncomment the line below
// qDebug() << "row = " << row << " col = "<< col << endl;
QStandardItem *item = new QStandardItem;
if(item)
in >> *item; // SIGSEGV in release mode only
else
return false;
userInfosModel->setItem(row,col,item);
}
整个项目与内部共享库链接,一切都在调试模式下正常工作。
我想在发布版本中某处存在堆栈损坏,可能是缓冲区溢出但到目前为止我找不到它。
我在这里缺少什么?
非常感谢。