QDataStream также не работает и возвращает ошибку при повторном использовании - PullRequest
0 голосов
/ 06 марта 2019

Я храню некоторые данные в 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 Ответ

0 голосов
/ 07 марта 2019

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.

...