今天犯了一个非常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[]);
element1.setAttribute("y", para.center[]);
element1.setAttribute("z", para.center[]);
root.appendChild(element1); QDomElement element2 = doc.createElement("para");
element2.setAttribute("name", "normal");
element2.setAttribute("x", para.normal[]);
element2.setAttribute("y", para.normal[]);
element2.setAttribute("z", para.normal[]);
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~

QDomDocument Access violation writing location的更多相关文章

  1. 使用scanf_s报错:0xC0000005: Access violation writing location 0x00000000

    在vs2010中写了一行scanf("%s",name); 调式时 提示warning , 提示修改为scanf()使用可能会存在不安全,建议使用scanf_s() 但是我修改成s ...

  2. VS2010程序崩溃,报错Unhandled exception at **.exe:0xC0000005: Access violation reading location 0x000000008899.

    最近被派到另外一个组支援,从而从Linux下开发暂转到Windows下开发,个人觉得Windows自己搞的一套并不那么完美,坑多. 网文可能出现的原因: 未处理的异常: 0xC0000005: 读取位 ...

  3. std::vector push_back报错Access violation

    C/C++ code   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include < ...

  4. STM32 KEIL不能输入仿真引脚端口error 65: access violation at 0x40021000 : no 'read' permission

    使用MDK自己创建一个STM32F103ZE核的项目 加入源码后编译,正常,在线仿真单步执行出现如下问题 error 65: access violation at 0x40021000 : no ' ...

  5. 如何捕获access violation异常

    文章目录 access violation的由来 access violation的实例 Win32 exception SEH异常与C++标准异常 捕获方法 1.access violation的由 ...

  6. 动态调用DLL函数有时正常,有时报Access violation的异常

    动态调用DLL函数有时正常,有时报Access violation的异常 typedef int (add *)(int a,int b); void test() {     hInst=LoadL ...

  7. Access Violation at address 00000000.Read of address 00000000 解决办法

    是数组越标或没有初始化某个对象之类的问题,搂住细细检查一下代码, 使用指针前未做检查,而这个指针未初始化. 可能是new后没有delete,这样出现溢出的可能性比较大     检查代码或者跟踪试试 使 ...

  8. u-boot TFTP: &#39;Access violation&#39; (2)

    今天做tftp下载时间会遇到以下问题. --->8--- Load address: 0x20000000 Loading: * TFTP error: 'Access violation' ( ...

  9. laravel migrate时报错:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

    今天在学习laravel的路由模型绑定时,在按照文档执行php artisan migrate时报错. In Connection.php line 664: SQLSTATE[42000]: Syn ...

随机推荐

  1. PL/SQL 触发器简介

    与公司同事交流了一下,得知触发器很少用.性能是一方面,主要是如果用太多触发器,可能到时你都不知道会有什么操作自动发生. 有些操作可以在程序中控制.例如在插入某个表时,写个log表的记录.这可以用触发器 ...

  2. Java-Hibernate官方英文文档地址

    Hibernate官方英文文档地址  http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/

  3. HTML5媒体播放说明

    HTML5中video标签播放m3u8整理 http://www.xue163.com/588880/39097/390970871.html 移动端HTML5<video>视频播放优化实 ...

  4. clientX 属性.

    Syntax: event.clientX The clientX event attribute returns the horizontal coordinate (according to th ...

  5. oracle如何获取当年第一月,如今年是2015年,则需获取 201501

    当年第一个月 SQL> select to_char(sysdate,'yyyy')||'01' from dual;TO_CHA ------ 201501当前年,月 SQL> sele ...

  6. SQL 优化,全

    性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设 ...

  7. java异步上传图片

    第一步:引入需要的js <script src="/res/common/js/jquery.js" type="text/javascript"> ...

  8. 【原创】ZeroClipboard的时代或许已经过去了

    曾经,一个网页上要用Javascript实现网页内容的复制,其实是很麻烦的一件事情.虽然在这个问题上IE有其高大上的 window.clipboardData 方法支持直接复制指定内容,Firefox ...

  9. 外部式css样式,写在单独的一个文件中

    外部式css样式(也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css”为扩展名,在<head>内(不是在<style>标签内)使用<l ...

  10. javascript--烟火效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <meta nam ...