Qt修改xml节点值报错,有未经处理的错误: 0xC0000005: 写入位置 0x00F00000 时发生访问冲突。有知道的大牛们都快来看看!
Qt修改xml节点值报错,有未经处理的异常: 0xC0000005: 写入位置 0x00F00000 时发生访问冲突。有知道的大牛们都快来看看!!
这是在viusal studio 2012下编译的,能修改,但是就是报下面这个错:
0x7719E3BE (ntdll.dll) (SNT.Tiv.Main.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x5538C2D7 时发生访问冲突。
堆栈里边显示:

要是我把修改节点的代码都注释掉后就没错了,大牛们,拜托,帮帮忙!
------解决思路----------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
------解决思路----------------------
死在那一句?
------解决思路----------------------
空指针了吧,你调试带那一句上面就知道了
void frmMachineConfig::OnTest(void *)
{
QFile file("C:/Users/Administrator/Desktop/test.xml");
if( !file.open(QIODevice::ReadOnly | QIODevice::Text ) )
{
return;
}
QDomDocument doc;
if(!doc.setContent(&file))
{
file.close();
return;
}
file.close();
QDomElement root = doc.documentElement();
QString tagname = root.tagName();
if(tagname != "kdevelop")
return;
QDomNode n = root.firstChild(); //general
while (!n.isNull())
{
QDomElement e = n.toElement();//general
if( !e.isNull())
{
if( e.nodeName() == "general" )
{
QDomNodeList list = e.childNodes(); //获得元素e的所有子节点的列表
int count = list.count();
for(int a=0; a<count; a++) //遍历该列表
{
QDomNode node = list.at(a);
if(node.isElement())
{
if( node.nodeName() == "author" )
{
QDomNode oldnode = node.firstChild(); //标签之间的内容作为节点的子节点出现,得到原来的子节点
node.firstChild().setNodeValue("tds"); //用提供的value值来设置子节点的内容
QDomNode newnode = node.firstChild(); //值修改过后
node.replaceChild(newnode,oldnode); //调用节点的replaceChild方法实现修改功能
}
if( node.nodeName() == "email" )
{
/*QDomNode oldnode = node.firstChild();
node.firstChild().setNodeValue("tdsadsadsadas4");
QDomNode newnode = node.firstChild();
node.replaceChild(newnode,oldnode);*/
}
}
}
}
}
n = n.nextSibling();
}
QFile filexml("C:/Users/Administrator/Desktop/test.xml");
if( !filexml.open(QIODevice::WriteOnly | QIODevice::Text) ){
qWarning("error::ParserXML->writeOperateXml->file.open\n");
return;
}
QTextStream ts(&filexml);
doc.save(ts, 4);
filexml.close();
}
这是在viusal studio 2012下编译的,能修改,但是就是报下面这个错:
0x7719E3BE (ntdll.dll) (SNT.Tiv.Main.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x5538C2D7 时发生访问冲突。
堆栈里边显示:
要是我把修改节点的代码都注释掉后就没错了,大牛们,拜托,帮帮忙!
------解决思路----------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
------解决思路----------------------
死在那一句?
------解决思路----------------------
空指针了吧,你调试带那一句上面就知道了