我正在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;
}
}
它可以很好地使用一次,但是当我重复使用此功能时,我得到了错误 分段故障。 预先感谢。
答案 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的原因。