QDataStream不能正常工作,并在重复使用时返回错误

时间:2019-03-05 22:41:00

标签: qt qt5 qdatastream

我正在QDataStream中存储一些数据并立即获取数据

bool M_FILEMANAGER::readFromDataFile(QString& fileName,RADARBEAMPATTERN *radbeam)
{
// for reading from file sequence .....
QFile fin(m_folderPath +"/"+ fileName);
if (fin.open(QIODevice::ReadOnly)) {
    QDataStream in(&fin);
    in.device()->startTransaction();
    in >> radbeam->nPoints;
    qDebug()<<"nPoints : "<<radbeam->nPoints;
    fin.close();
    return true;
}else{
    return false;
}
}

它可以很好地使用一次,但是当我重复使用此功能时,我得到了错误 分段故障。 预先感谢。

1 个答案:

答案 0 :(得分:0)

1)奇怪地使用QIODevice::startTransaction()。您是要使用QDataStream:startTransaction()吗?您根本不需要它,但是如果您打算使用它来检查文件中的“有效”(完整)数据,请执行properly(尽管通常与套接字等异步设备一起使用):

int nPoints;  // temp variable to hold data, assuming radbeam->nPoints is an int
QDataStream in(&fin);
in.startTransaction();
in >> nPoints;
if (in.commitTransaction() && radbeam != nullptr)
    radbeam->nPoints = nPoints;
fin.close();

2)Segfault最有可能是由于radbeam指针(例如为null)引起的,但是如果您试图将损坏的数据直接读入成员变量nPoints中,则可能是由于段错误。无法确定没有MCVE的原因。