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