QDataStream 无法正常工作,并且 return 重用时出错

QDataStream not working as well and return error with reusing

我正在 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() 吗?你根本不需要它,但是如果你打算用它来检查文件中的 "valid" (完整)数据,那么就 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) 段错误最有可能是由于 radbeam 指针(例如为空),但如果您试图将损坏的数据直接读入成员变量 nPoints,则可能。无法确定原因 w/out MCVE。