仅在发布模式下从QDataStream读取QStandardItem时的SIGSEGV

时间:2016-08-18 15:14:55

标签: qt serialization sigsegv

我有一些麻烦调试这段代码,它使用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);  

    }

整个项目与内部共享库链接,一切都在调试模式下正常工作。

我想在发布版本中某处存在堆栈损坏,可能是缓冲区溢出但到目前为止我找不到它。

我在这里缺少什么?

非常感谢。

0 个答案:

没有答案