-1

我在 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;
}
}

它适用于一次使用,但是当我重用此功能时,我得到错误分段错误。提前致谢。

4

1 回答 1

1

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

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指针(例如为空),但如果您试图将损坏的数据直接读取到成员变量nPoints中。无法确定没有 MCVE 的原因。

于 2019-03-07T02:44:42.233 回答