我有一个类,它是一个文件处理程序,它有一个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,则执行以下命令
readabsstream((myAbsFileHandler.absfilepointer)); QTextStream
但这条语句给出了关键的异常,并从执行过程中得出结论。知道为什么会这样吗?谢谢。
发布于 2018-02-20 12:19:56
我建议在没有必要的情况下不要使用原始指针,为什么需要保存QFile*?我想您希望使用QTextStream(QIODevice *device)创建一个流,如果方法需要的话,您可以简单地传递一个指向文件的指针。
您遇到的问题是创建一个指向本地作用域QFile readfile的指针,因为它是在堆栈上创建的,因此它将在AbsFileHandler::OpenAbsFile()方法的末尾被销毁。因此,在方法返回后指针就无效了!
因此,解决方案只是保存一个QFile (而不是指针),或者用new QFile在堆上创建QFile,以保持对象的活力,但是如果您必须自己管理内存并在以后删除它,这不是一个好主意。
https://stackoverflow.com/questions/48885006
复制相似问题