zoukankan      html  css  js  c++  java
  • QDomDocument Access violation writing location

    今天犯了一个非常2的错误!

     为了将面板参数保存起来,选择用QDomDocument构造Dom树,然后用doc.toString()方法返回符合xml格式的QString。如:

    QString CutFaceFilter::saveParamsXML(CutFaceParams& para)
    {
        QDomDocument doc;    
    
        QDomElement root = doc.createElement("parameters");
        doc.appendChild(root);
    
        QDomElement element1 = doc.createElement("para");
        element1.setAttribute("name", "center");
        element1.setAttribute("x", para.center[0]);
        element1.setAttribute("y", para.center[1]);
        element1.setAttribute("z", para.center[2]);
        root.appendChild(element1);
    
        QDomElement element2 = doc.createElement("para");
        element2.setAttribute("name", "normal");
        element2.setAttribute("x", para.normal[0]);
        element2.setAttribute("y", para.normal[1]);
        element2.setAttribute("z", para.normal[2]);
        root.appendChild(element2);
    
        return doc.toString();
    }

    此方法在本地运行正常,但将其封装导出为一个DLL文件,再次调用时,一直报错:“Access violation writing location”。跟踪代码,发现出了这个函数,在return后就会报错,即使将这个doc.toString()拷贝出来,甚至使用QString的deep copy:

      QString str(doc.toString().toLocal8Bit ());
      return str;

    仍报错这个错。Google了好久,也没发现原因。

      JL之前说QDomElement递归调用时会各种出错,于是感觉是否QDomDocument这个方法不靠谱。。。

    (1) 换用QxmlStreamWriter, 直接返回时,是bad prt,用QString 的deep copy后,可以得到正确的结果。但换用这个方法,工程中用到QDomDocument的地方都要改,改动太大,太麻烦。

    (2) 继续搜,猛然发现一帖,说也在使用QDom时出现了violation的问题,结果是由于引用的lib不是Debug版的QtXmld4.lib。而是QtXml4.lib。 醍醐灌顶,一查我的工程,果然也是这个lib错写成Release版的了。改为QtXmld4.lib后,问题得解!!

       这个错误太2了,以后吸取教训,出现violation错误时, 要记得看看是否是导入的lib库Debug 、Release搞混了。Mark~

  • 相关阅读:
    MySQL 可重复读,差点就让我背上了一个 P0 事故
    Thread.sleep(0) 有什么用
    你不会还在用这8个错误的SQL写法吧?
    Spring事务失效的 8 大原因
    我说 SELECT COUNT(*) 会造成全表扫描,面试官让我回去等通知
    这么写参数校验(Validator)就不会被劝退了
    HyperLedger Fabric 1.4 基础环境搭建(7)
    HyperLedger Fabric 1.4 简介(6.1)
    HyperLedger Fabric 1.4 关键技术(6.4)
    HyperLedger Fabric 1.4 交易流程(6.3)
  • 原文地址:https://www.cnblogs.com/wenshanzh/p/3470261.html
Copyright © 2011-2022 走看看