首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTextStream和QFile指针

QTextStream和QFile指针
EN

Stack Overflow用户
提问于 2018-02-20 12:09:16
回答 1查看 923关注 0票数 0

我有一个类,它是一个文件处理程序,它有一个QFILE指针,如下所示。

代码语言:javascript
复制
QString absfilename;
QFile * absfilepointer;

我有个开场白。

代码语言:javascript
复制
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,则执行以下命令

readabsstream((myAbsFileHandler.absfilepointer)); QTextStream

但这条语句给出了关键的异常,并从执行过程中得出结论。知道为什么会这样吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-02-20 12:19:56

我建议在没有必要的情况下不要使用原始指针,为什么需要保存QFile*?我想您希望使用QTextStream(QIODevice *device)创建一个流,如果方法需要的话,您可以简单地传递一个指向文件的指针。

您遇到的问题是创建一个指向本地作用域QFile readfile的指针,因为它是在堆栈上创建的,因此它将在AbsFileHandler::OpenAbsFile()方法的末尾被销毁。因此,在方法返回后指针就无效了!

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48885006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档