0

我有一个类是 absfilehandler,它有一个像这样的 QFILE 指针..

QString absfilename;
QFile * absfilepointer;

我有一个打开方法。

bool  AbsFileHandler::OpenAbsFile()
{


    QFile readfile(absfilename);
    absfilepointer = (&readfile);

    if (!(*absfilepointer).exists())
    {
        qDebug() << "The file" << (*absfilepointer).fileName() << "does not exist.";
        return false;
    }

    else if (!(*absfilepointer).open((QIODevice::ReadOnly) | (QIODevice::Text)))
    {
        qDebug() << "Could not open" << (*absfilepointer).fileName() << "for reading.";
        return false;
    }
    else
    {
        qDebug() << "File ready to read";
        return true;
    }
}

我用同一个类的对象调用另一个类中的方法,例如 myAbsFileHandler.OpenAbsFile()

如果它返回true,那么我们执行这个

QTextStream readabsstream((myAbsFileHandler.absfilepointer));

但是这个语句给出了严重的异常并且退出了执行。知道为什么会这样吗?谢谢。

4

1 回答 1

1

我建议在不需要时不要使用原始指针,为什么需要保存QFile*? 我猜你想创建一个流QTextStream(QIODevice *device),然后如果方法需要一个指针,你可以简单地传递一个指向你的文件的指针。

您遇到的问题是您创建了一个指向本地 scoped 的指针QFile readfile,因为它是在堆栈上创建的,它将在您的AbsFileHandler::OpenAbsFile()方法结束时被销毁。所以方法返回后指针变为无效!

所以解决方案只是保存一个QFile(不是指针)或QFile在堆上创建new QFile以保持对象的活动,但如果您必须自己管理内存并稍后删除它,这不是一个好主意。

于 2018-02-20T12:19:56.740 回答