" myprogram.exe中的0x000007FEFD5D7C8A(ole32.dll)处的未处理异常:0xC0000005:访问冲突读取位置0xFFFFFFFFFFFFFFFF"

时间:2016-04-04 09:01:36

标签: c++ qfile

我尝试使用QfileDialog(作为静态fct)让用户选择并读取" .txt"文件,如下:

void VisOCMConfig::readNmbTiles()
{
    QString  m_findFile;
    m_findFile = QFileDialog::getOpenFileName(0, tr("Open TextFile"),
                                              QDir::homePath(), tr("Text files (*.txt)"));

    QFile myfile(m_findFile);
    if (!myfile.open(QIODevice::ReadOnly | QIODevice::Text))
        return;
    else 
        while (!myfile.atEnd()) 
        {
            m_scanPos = myfile.readLine();
            m_nmbofLines++;
        }

    myfile.close();
    qDebug() << "Scan Positions: (" << m_scanPos.size() << "): " << m_scanPos;
    m_nmbofScan->setText(QString("#Tiles: %1").arg(m_nmbofLines));
}

其中m_scanPos是在VisOCMConfig.h中初始化的QByteArray。

当我运行程序时,它正常工作,直到突然发生中断,并显示以下消息:

  

0x000007FEFD5D7C8A(ole32.dll)中的未处理异常   VisOCMConfig.exe:0xC0000005:访问冲突读取位置   0xFFFFFFFFFFFFFFFF

我在其他问题上读到可能是因为使用了空指针,但我仍然对它失去了兴趣。你能说出我的错误吗?

4 个答案:

答案 0 :(得分:1)

我一直有同样的问题。尝试使用“DontUseNativeDialog”作为标志。我相信这可以解决崩溃,但是你会留下一个非原生的对话框。

答案 1 :(得分:1)

我有同样的问题。解决方案也是使用非原生QFileDialog。 实际上它只出现在调试模式下。在发布模式中,evething很好。

相同的代码在QT4.8下工作。不知何故,它不是在使用QT5.6时。

答案 2 :(得分:0)

那些贬低这个问题的人(我赞成它)非常欢迎我也回答这个问题。

我在Qt 5.2.1中遇到了同样的问题 - 在使用QFileDialog :: getOpenFileName()之后的ole32.dll中出现相同的异常 - 不是立即,而是在10-60秒之后。如果我继续申请,它会发生,如果在打开文件后什么也不做,就等一段时间。 使用&#34; DontUseNativeDialog&#34;正如@aeson和@guest所建议的那样避免了这个问题。 我希望这些信息可以帮助他人。

@MartinBonner我认为标签应该改回QFileDialog,因为问题显然与它有关

答案 3 :(得分:-1)

我遇到了同样的错误 - 我的应用程序在调试模式下崩溃了。

如果在发生此问题时检查调用堆栈,您会注意到该问题与NetworkItemFactory.dll组件有关。

此处描述了类似的问题:Unhandled exception in marshal.cxx under VS2013

Microsoft已修复此问题,因此解决方案是应用Microsoft的修补程序Windows6.1-KB2718841

相关问题