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)QIODevice::startTransaction()的奇怪使用。您是说使用QDataStream:startTransaction()吗?您根本不需要它,但是如果您打算使用它来检查文件中的"有效"(完整)数据,请正确执行(尽管通常与sockets等异步设备一起使用):

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的原因。

相关内容

  • 没有找到相关文章

最新更新